Files
Serien-Checker/build.py
2025-12-21 14:35:08 +01:00

96 lines
3.1 KiB
Python

#!/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()