From 13b481bd409ba361e1c0b7e1c970552ab9bda859 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 27 Aug 2025 01:04:49 +0300 Subject: [PATCH] Add cx_Freeze setup script for Windows build Introduces a setup.py script for building YTSage on Windows using cx_Freeze. Supports building executables, MSI installers, and ZIP distributions, with detailed configuration for included/excluded packages, assets, and installer options. --- build/windows/setup.py | 131 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 130 insertions(+), 1 deletion(-) diff --git a/build/windows/setup.py b/build/windows/setup.py index ad80c42..72c7232 100644 --- a/build/windows/setup.py +++ b/build/windows/setup.py @@ -1 +1,130 @@ -create file +""" +cx_Freeze setup script for YTSage +Supports building executables, MSI installers, and ZIP distributions +""" + +import sys +from pathlib import Path +from cx_Freeze import setup, Executable + +# Build options for executable +build_exe_options = { + # Packages to include + "packages": [ + "PySide6.QtCore", + "PySide6.QtGui", + "PySide6.QtWidgets", + "src.gui.ytsage_gui_main", + "src.core.ytsage_utils", + "src.core.ytsage_downloader", + "src.core.ytsage_ffmpeg", + "src.core.ytsage_yt_dlp", + "src.core.ytsage_style", + "src.core.ytsage_logging", + "src.gui.ytsage_gui_format_table", + "src.gui.ytsage_gui_video_info", + "src.gui.ytsage_gui_dialogs", + "src.gui.ytsage_gui_dialogs.ytsage_dialogs_base", + "src.gui.ytsage_gui_dialogs.ytsage_dialogs_custom", + "src.gui.ytsage_gui_dialogs.ytsage_dialogs_ffmpeg", + "src.gui.ytsage_gui_dialogs.ytsage_dialogs_selection", + "src.gui.ytsage_gui_dialogs.ytsage_dialogs_settings", + "src.gui.ytsage_gui_dialogs.ytsage_dialogs_update", + "src.utils.ytsage_constants", + # Additional packages that might be needed + "requests", + "PIL", # Pillow is imported as PIL + "packaging", + "markdown", + "playsound3", + "loguru", + "setuptools" + ], + + # Packages to exclude (to reduce size) + "excludes": [ + "PySide6.QtBluetooth", + "PySide6.QtNetwork", + "PySide6.QtOpenGL", + "PySide6.QtPrintSupport", + "PySide6.QtSvg", + "PySide6.QtTest", + "PySide6.QtXml", + "PySide6.QtSql", + "PySide6.QtHelp", + "PySide6.QtMultimedia", + "PySide6.QtQml", + "PySide6.QtQuick", + "PySide6.QtWebEngineCore", + "PIL.ImageDraw", + "PIL.ImageFont", + "numpy", + "scipy", + "wx", + "pandas", + "tkinter", + "yt_dlp", # Excluded - downloaded dynamically at runtime (all imports are conditional) + "unittest", + "test", + "tests" + ], + + # Include files (assets) + "include_files": [ + ("assets/Icon/icon.png", "assets/Icon/icon.png"), + ("assets/sound/notification.mp3", "assets/sound/notification.mp3"), + ("assets/branding/icons/YTSage.ico", "YTSage.ico") + ], + + # Zip includes (can help reduce file count) + "zip_include_packages": "*", + "zip_exclude_packages": [], + + # Other options + "optimize": 2, # Optimize bytecode + "build_exe": "dist/YTSage", # Output directory for executable +} + +# MSI build options +bdist_msi_options = { + "upgrade_code": "{12345678-1234-5678-9ABC-123456789ABC}", # Generate unique GUID + "add_to_path": False, + "initial_target_dir": r"[ProgramFilesFolder]\YTSage", + "install_icon": "assets/branding/icons/YTSage.ico", + "summary_data": { + "author": "oop7", + "comments": "YouTube Video Downloader - Easy to use video downloading tool", + "keywords": "youtube, downloader, video, audio, converter" + } +} + +# Base configuration for Windows GUI application +base = None +if sys.platform == "win32": + base = "Win32GUI" # This prevents console window from appearing + +# Executable configuration +executable = Executable( + "main.py", + base=base, + icon="assets/branding/icons/YTSage.ico", + target_name="YTSage-v4.8.0.exe", + copyright="Copyright (c) 2024-2025 YTSage", + trademarks="YTSage" +) + +# Setup configuration +setup( + name="YTSage", + version="4.8.0", + description="YouTube Video Downloader", + author="oop7", + author_email="oop7_support@proton.me", + url="https://github.com/oop7/ytsage", + license="MIT", + options={ + "build_exe": build_exe_options, + "bdist_msi": bdist_msi_options + }, + executables=[executable] +)