Files
onever_drive/windows-agent/build_exe.py
T

94 lines
3.0 KiB
Python

import os
import sys
import subprocess
from pathlib import Path
def build_windows_exe():
agent_dir = Path(__file__).resolve().parent
assets_dir = agent_dir / "assets"
ico_path = assets_dir / "icon.ico"
if not ico_path.exists():
print("[*] Generating icons...")
from create_icons import generate_app_icons
generate_app_icons()
print("========================================================================")
print(" BUILDING ONEVER DRIVE MODERN PYQT6 WINDOWS EXECUTABLE (.EXE) ")
print("========================================================================")
dist_dir = agent_dir / "dist"
build_dir = agent_dir / "build"
# PyInstaller arguments for modern PyQt6 standalone agent
pyinstaller_args = [
sys.executable,
"-m",
"PyInstaller",
"--noconfirm",
"--onedir",
"--windowed", # No console popup, pure GUI and tray
f"--icon={str(ico_path)}",
f"--name=OnEverDriveAgent",
f"--distpath={str(dist_dir)}",
f"--workpath={str(build_dir)}",
f"--add-data={str(assets_dir)}{os.pathsep}assets",
"--hidden-import=PyQt6",
"--hidden-import=PyQt6.QtCore",
"--hidden-import=PyQt6.QtGui",
"--hidden-import=PyQt6.QtWidgets",
"--hidden-import=httpx",
"--hidden-import=pydantic",
"--hidden-import=pydantic_settings",
"--hidden-import=schedule",
"--hidden-import=sqlite3",
str(agent_dir / "agent_app_pyqt.py")
]
print(f"[*] Compiling PyQt6 directory bundle...")
subprocess.run(pyinstaller_args, check=True, cwd=str(agent_dir))
# Single-file build
standalone_args = [
sys.executable,
"-m",
"PyInstaller",
"--noconfirm",
"--onefile",
"--windowed",
f"--icon={str(ico_path)}",
f"--name=OnEverDriveAgent-Standalone",
f"--distpath={str(dist_dir)}",
f"--workpath={str(build_dir)}",
f"--add-data={str(assets_dir)}{os.pathsep}assets",
"--hidden-import=PyQt6",
"--hidden-import=PyQt6.QtCore",
"--hidden-import=PyQt6.QtGui",
"--hidden-import=PyQt6.QtWidgets",
"--hidden-import=httpx",
"--hidden-import=pydantic",
"--hidden-import=pydantic_settings",
"--hidden-import=schedule",
"--hidden-import=sqlite3",
str(agent_dir / "agent_app_pyqt.py")
]
print(f"[*] Compiling standalone single-file .exe...")
subprocess.run(standalone_args, check=True, cwd=str(agent_dir))
exe_path = dist_dir / "OnEverDriveAgent" / "OnEverDriveAgent.exe"
single_exe_path = dist_dir / "OnEverDriveAgent-Standalone.exe"
print("")
echo = "========================================================================"
print(echo)
print(f"[+] PyQt6 Executables built successfully:")
print(f" 1. {exe_path}")
print(f" 2. {single_exe_path}")
print(echo)
return exe_path
if __name__ == "__main__":
build_windows_exe()