94 lines
3.0 KiB
Python
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()
|