96 lines
3.1 KiB
Python
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()
|