From 6aa50b03da5023e418f1fa4696330f786ec92ca1 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 24 Jul 2025 23:43:27 +0300 Subject: [PATCH] =?UTF-8?q?feat(build):=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BA=D1=80=D0=BE=D1=81=D1=81-?= =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D1=82=D1=84=D0=BE=D1=80=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=20setup.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Модифицирован скрипт сборки на основе cx_Freeze для обеспечения совместимости с основными операционными системами (Windows, macOS, Linux). Ранее скрипт был настроен преимущественно для Windows. Ключевые изменения: - **Динамическое имя файла:** Исполняемый файл получает расширение `.exe` только при сборке на Windows. - **Разделение сборок:** Для каждой целевой ОС создается своя папка (например, `build_linux`), что позволяет хранить сборки для разных систем одновременно. - **Платформо-зависимые опции:** Учтены особенности сборки для каждой ОС, включая `base="Win32GUI"` для Windows и `base=None` для Linux. --- setup.py | 99 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 51 insertions(+), 48 deletions(-) diff --git a/setup.py b/setup.py index 208d80c..d9da717 100644 --- a/setup.py +++ b/setup.py @@ -3,74 +3,77 @@ import sys import os from cx_Freeze import setup, Executable -# Определите имя вашего основного скрипта +# --- Основные настройки --- + +# Имя вашего основного скрипта main_script = "main.py" # Замените на имя вашего основного Python-файла -# Определите имя исполняемого файла -exe_name = "AnabasisHRChatManager" # Имя вашего .exe файла +# Имя вашего приложения (исполняемого файла без расширения) +exe_name = "AnabasisHRChatManager" -# Определите базовый тип приложения: -# - None: Для консольных приложений (консоль будет открываться) -# - "Win32GUI": Для графических приложений на Windows (консоль не будет открываться) -# - "MacOSX": Для графических приложений на macOS +# --- Платформо-зависимые настройки --- + +# Определяем базовый тип приложения и имя конечного файла base = None -if sys.platform == "win32": - base = "Win32GUI" # Для оконных приложений на Windows без консоли -elif sys.platform == "darwin": # Для macOS - base = "MacOSX" +target_name = exe_name +icon_path = "icon.ico" # Путь к иконке по умолчанию -# Определите опции сборки. -# Это словарь, который настраивает, какие пакеты включать/исключать, -# какие файлы добавлять и другие параметры. +if sys.platform == "win32": + # Для графических приложений на Windows (консоль не будет открываться) + base = "Win32GUI" + # Добавляем расширение .exe для Windows + target_name = f"{exe_name}.exe" +elif sys.platform == "darwin": # macOS + base = "MacOSX" + # Иконки для macOS имеют формат .icns + # icon_path = "icon.icns" +elif sys.platform.startswith("linux"): # Linux + # Для Linux обычно не требуется специальный 'base' + # Иконки могут быть в формате .png или .xpm + # icon_path = "icon.png" + pass # Оставляем base = None + +# --- Опции сборки --- + +# Общие опции сборки для всех платформ build_exe_options = { - # 'packages' - список пакетов, которые cx_Freeze должен гарантированно включить. - # Это полезно для пакетов, которые динамически импортируются или не обнаруживаются автоматически. - "packages": ["os", "sys", "requests", "json", "webbrowser"], # Пример: добавьте сюда любые используемые библиотеки - # 'excludes' - список пакетов, которые cx_Freeze должен исключить. - # Это помогает уменьшить размер сборки, исключая ненужные модули. - "excludes": ["tkinter", "unittest", "PyQt5.QtWebEngineWidgets"], # Пример: исключаем tkinter, если не используется - # 'include_files' - список дополнительных файлов или папок, которые нужно включить в сборку. - # Это могут быть изображения, конфигурационные файлы, FXML-файлы (для JavaFX, не Python) и т.д. - # Формат: [('источник', 'назначение_в_сборке')] или просто ['путь/к/файлу_или_папке'] - # Например, если у вас есть папка 'resources' с иконками или другими данными: - # "include_files": ["resources/", "config.ini"], - # Если иконка находится в корне: - "include_files": [], # Добавьте сюда любые ресурсы - # 'include_msvcr' - для Windows, включает C++ Runtime Library (CRT) - # Часто необходимо для работы некоторых нативных модулей Python. - "include_msvcr": True, - # 'optimize' - уровень оптимизации (0, 1, 2). 2 - максимальная оптимизация, но может быть медленнее. - # "optimize": 0, - # 'zip_include_packages' - упаковывать ли пакеты в zip-файл внутри исполняемого файла. - # Уменьшает количество файлов, но может увеличить время запуска. - # По умолчанию cx_Freeze упаковывает большинство пакетов. - # "zip_include_packages": ["*"], + # 'packages' - список пакетов для обязательного включения. + "packages": ["os", "sys", "requests", "json", "webbrowser"], + + # 'excludes' - список пакетов для исключения. + "excludes": ["tkinter", "unittest", "PyQt5.QtWebEngineWidgets"], + + # 'include_files' - список дополнительных файлов или папок. + # Формат: [('источник', 'назначение_в_сборке')] + "include_files": [], # Например: ["resources/", "config.ini"] + # 'build_exe' - папка для выходных файлов - "build_exe": "build_cx", + "build_exe": f"build_{sys.platform}", # Создаём отдельную папку для каждой ОС } -# Определите исполняемые файлы +# Опции, специфичные для Windows +if sys.platform == "win32": + build_exe_options["include_msvcr"] = True # Включаем C++ Runtime Library + +# --- Определение исполняемого файла --- + executables = [ Executable( script=main_script, base=base, - target_name=f"{exe_name}.exe", # Имя конечного .exe файла - icon="icon.ico" # Путь к файлу иконки .ico - # Для создания ярлыков в меню "Пуск" можно использовать shortcut_name и shortcut_dir здесь. - # Например: - # shortcut_name=exe_name, - # shortcut_dir="StartMenuFolder" # Создаст ярлык в меню "Пуск" в корневой папке приложения + target_name=target_name, # Имя конечного файла + icon=icon_path # Путь к файлу иконки ) ] -# Настройте метаданные вашего приложения +# --- Настройка метаданных и запуск сборки --- + setup( name=exe_name, - version="0.1", + version="1.2", description="Управление чатами для HR-менеджеров", options={ "build_exe": build_exe_options }, executables=executables -) - +) \ No newline at end of file