Files
Copyrka/build.py
2026-02-19 19:06:21 +03:00

78 lines
2.0 KiB
Python

import os
import shutil
import subprocess
import sys
import zipfile
APP_NAME = "BackupCopier"
VERSION = "1.0.0"
MAIN_SCRIPT = "main.py"
ICON_PATH = "icon.ico"
EXE_PATH = os.path.join("dist", f"{APP_NAME}.exe")
ZIP_PATH = os.path.join("dist", f"{APP_NAME}-{VERSION}.zip")
def ensure_build_deps() -> None:
try:
__import__("PyInstaller")
except Exception:
print("[ERROR] Missing dependency: PyInstaller")
print(f"[ERROR] Install in this interpreter: {sys.executable} -m pip install pyinstaller")
sys.exit(1)
def run_build() -> None:
icon_abs = os.path.abspath(ICON_PATH)
has_icon = os.path.exists(icon_abs)
cmd = [
sys.executable,
"-m",
"PyInstaller",
"--noconfirm",
"--clean",
"--onefile",
"--windowed",
f"--name={APP_NAME}",
"--hidden-import=schedule",
"--collect-submodules=schedule",
"--hidden-import=pystray",
"--hidden-import=PIL",
"--collect-submodules=pystray",
"--collect-submodules=PIL",
f"--icon={icon_abs}" if has_icon else "",
f"--add-data={icon_abs}{os.pathsep}." if has_icon else "",
MAIN_SCRIPT,
]
cmd = [x for x in cmd if x]
subprocess.check_call(cmd)
def write_version_file() -> str:
path = os.path.join("dist", "version.txt")
with open(path, "w", encoding="utf-8") as f:
f.write(VERSION + "\n")
return path
def create_zip(version_file: str) -> None:
with zipfile.ZipFile(ZIP_PATH, "w", zipfile.ZIP_DEFLATED) as z:
z.write(EXE_PATH, arcname=os.path.basename(EXE_PATH))
z.write(version_file, arcname="version.txt")
if os.path.exists(ICON_PATH):
z.write(ICON_PATH, arcname="icon.ico")
if __name__ == "__main__":
ensure_build_deps()
for folder in ("build", "dist"):
if os.path.exists(folder):
shutil.rmtree(folder)
run_build()
vfile = write_version_file()
create_zip(vfile)
print(f"[OK] Built: {EXE_PATH}")
print(f"[OK] Archive: {ZIP_PATH}")