import argparse import os import shutil import subprocess import sys PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) ENTRY_POINT = os.path.join(PROJECT_ROOT, "src", "mind_reader", "app.py") def build(): cmd = [ sys.executable, "-m", "PyInstaller", "--noconfirm", "--clean", "--onedir", "--windowed", "--name", "MindReader", "--paths", os.path.join(PROJECT_ROOT, "src"), ENTRY_POINT, ] result = subprocess.run(cmd, cwd=PROJECT_ROOT) if result.returncode == 0: dist_path = os.path.join(PROJECT_ROOT, "dist", "MindReader") print("\nBuild completed!") print(f"{dist_path}") else: print("\nError!") def clean(): print("Cleaning...") dirs_to_remove = [ os.path.join(PROJECT_ROOT, "build"), os.path.join(PROJECT_ROOT, "dist"), ] for d in dirs_to_remove: if os.path.exists(d): shutil.rmtree(d) print(f"{d} - deleted") for item in os.listdir(PROJECT_ROOT): if item.endswith(".spec"): spec_path = os.path.join(PROJECT_ROOT, item) os.remove(spec_path) print(f"{spec_path} - deleted") print("Cleaning completed!") if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--clean-only", action="store_true") args = parser.parse_args() if args.clean_only: clean() else: build()