From 134aa88f22d6027a59c8c23036dca2926712efa2 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 28 Jun 2025 02:15:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=8B?= =?UTF-8?q?=20=D0=B2=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D1=8F=D0=B5?= =?UTF-8?q?=D0=BC=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +-- icon.ico | Bin 0 -> 133982 bytes setup.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 icon.ico create mode 100644 setup.py diff --git a/.gitignore b/.gitignore index 5f89590..2c2e986 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ /.venv/ -/.venv1/ -/.venv3/ +/setup.py +/build_cx/ diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..866e98fc8a955821cf70884b934758f28d55105b GIT binary patch literal 133982 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 literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..208d80c --- /dev/null +++ b/setup.py @@ -0,0 +1,76 @@ +# setup.py +import sys +import os +from cx_Freeze import setup, Executable + +# Определите имя вашего основного скрипта +main_script = "main.py" # Замените на имя вашего основного Python-файла + +# Определите имя исполняемого файла +exe_name = "AnabasisHRChatManager" # Имя вашего .exe файла + +# Определите базовый тип приложения: +# - None: Для консольных приложений (консоль будет открываться) +# - "Win32GUI": Для графических приложений на Windows (консоль не будет открываться) +# - "MacOSX": Для графических приложений на macOS +base = None +if sys.platform == "win32": + base = "Win32GUI" # Для оконных приложений на Windows без консоли +elif sys.platform == "darwin": # Для macOS + base = "MacOSX" + +# Определите опции сборки. +# Это словарь, который настраивает, какие пакеты включать/исключать, +# какие файлы добавлять и другие параметры. +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": ["*"], + # 'build_exe' - папка для выходных файлов + "build_exe": "build_cx", +} + +# Определите исполняемые файлы +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" # Создаст ярлык в меню "Пуск" в корневой папке приложения + ) +] + +# Настройте метаданные вашего приложения +setup( + name=exe_name, + version="0.1", + description="Управление чатами для HR-менеджеров", + options={ + "build_exe": build_exe_options + }, + executables=executables +) +