#!/usr/bin/env -S uv run --script # /// script # requires-python = ">=3.11" # dependencies = [ # "pyinstaller>=6.11.1", # "PyQt5>=5.15.0", # "requests>=2.31.0", # "beautifulsoup4>=4.12.0", # "lxml>=4.9.0", # ] # /// """ Build script for creating a onefile EXE of Serien-Checker using PyInstaller. Usage: uv run build.py """ import sys from pathlib import Path import PyInstaller.__main__ def build_exe(): """Build the Serien-Checker executable.""" # Get project root directory project_root = Path(__file__).parent # Define paths main_script = project_root / "main.py" icon_file = project_root / "icon.ico" # Verify required files exist if not main_script.exists(): print(f"Error: main.py not found at {main_script}") sys.exit(1) if not icon_file.exists(): print(f"Error: icon.ico not found at {icon_file}") sys.exit(1) print("Building Serien-Checker.exe...") print(f"Entry point: {main_script}") print(f"Icon: {icon_file}") # PyInstaller arguments args = [ str(main_script), # Entry point "--name=Serien-Checker", # Name of the executable "--onefile", # Create a single executable "--windowed", # No console window (GUI app) f"--icon={icon_file}", # Application icon (for EXE itself) "--noconfirm", # Replace output directory without asking # Add icon.ico as data file so it's available at runtime f"--add-data={icon_file};.", # Collect all PyQt5 submodules "--collect-submodules=PyQt5", # Collect other third-party dependencies "--collect-submodules=requests", "--collect-submodules=bs4", "--collect-submodules=lxml", # Hidden imports for all serien_checker submodules "--hidden-import=serien_checker", "--hidden-import=serien_checker.database", "--hidden-import=serien_checker.database.db_manager", "--hidden-import=serien_checker.database.models", "--hidden-import=serien_checker.scraper", "--hidden-import=serien_checker.scraper.browser_scraper", "--hidden-import=serien_checker.scraper.fernsehserien_scraper", "--hidden-import=serien_checker.ui", "--hidden-import=serien_checker.ui.main_window", "--hidden-import=serien_checker.ui.options_dialog", "--hidden-import=serien_checker.ui.widgets", "--hidden-import=serien_checker.utils", "--hidden-import=serien_checker.utils.logger", "--hidden-import=serien_checker.utils.threading", # Collect all submodules from serien_checker package "--collect-submodules=serien_checker", ] # Run PyInstaller try: PyInstaller.__main__.run(args) print("\n✓ Build successful!") print(f"Executable created: {project_root / 'dist' / 'Serien-Checker.exe'}") except Exception as e: print(f"\n✗ Build failed: {e}") sys.exit(1) if __name__ == "__main__": build_exe()