import os import shutil import subprocess import sys # --- Конфигурация --- APP_NAME = "AnabasisManager" VERSION = "1.3" # Ваша версия MAIN_SCRIPT = "main.py" ICON_PATH = "icon.ico" DIST_DIR = os.path.join("dist", APP_NAME) ARCHIVE_NAME = f"{APP_NAME}-{VERSION}" # Формат Название-Версия def run_build(): print(f"--- 1. Запуск PyInstaller для {APP_NAME} v{VERSION} ---") command = [ "pyinstaller", "--noconfirm", "--onedir", "--windowed", f"--name={APP_NAME}", f"--icon={ICON_PATH}" if os.path.exists(ICON_PATH) else "", f"--add-data={ICON_PATH}{os.pathsep}." if os.path.exists(ICON_PATH) else "", "--collect-all", "PySide6.QtWebEngineCore", "--collect-all", "PySide6.QtWebEngineWidgets", MAIN_SCRIPT ] command = [arg for arg in command if arg] try: subprocess.check_call(command) print("\n[OK] Сборка PyInstaller завершена.") except subprocess.CalledProcessError as e: print(f"\n[ERROR] Ошибка при сборке: {e}") sys.exit(1) def run_cleanup(): print(f"\n--- 2. Оптимизация папки {APP_NAME} ---") # Пытаемся найти папку PySide6 внутри сборки pyside_path = os.path.join(DIST_DIR, "PySide6") if not os.path.exists(pyside_path): pyside_path = DIST_DIR to_remove = [ "Qt6Pdf.dll", "Qt6PdfQuick.dll", "Qt6PdfWidgets.dll", "Qt6VirtualKeyboard.dll", "Qt6Positioning.dll", "Qt6PrintSupport.dll", "Qt6Svg.dll", "Qt6Sql.dll", "Qt6Charts.dll", "Qt6Multimedia.dll", "Qt63DCore.dll", "translations", "Qt6QuickTemplates2.dll" ] for item in to_remove: path = os.path.join(pyside_path, item) if os.path.exists(path): try: if os.path.isdir(path): shutil.rmtree(path) else: os.remove(path) print(f"Удалено: {item}") except Exception as e: print(f"Пропуск {item}: {e}") def create_archive(): print(f"\n--- 3. Создание архива {ARCHIVE_NAME}.zip ---") try: # Создаем zip-архив из папки DIST_DIR # base_name - имя файла без расширения, format - 'zip', root_dir - что упаковываем shutil.make_archive(os.path.join("dist", ARCHIVE_NAME), 'zip', DIST_DIR) print(f"[OK] Архив создан: dist/{ARCHIVE_NAME}.zip") except Exception as e: print(f"[ERROR] Не удалось создать архив: {e}") if __name__ == "__main__": # Предварительная очистка for folder in ["build", "dist"]: if os.path.exists(folder): shutil.rmtree(folder) run_build() run_cleanup() create_archive() print("\n" + "=" * 30) print(f"ПРОЦЕСС ЗАВЕРШЕН") print(f"Файл для отправки: dist/{ARCHIVE_NAME}.zip") print("=" * 30)