Spaces:
Running
Running
| # picarones.spec β Configuration PyInstaller | |
| # | |
| # Génère un exécutable standalone Picarones pour Linux, macOS et Windows. | |
| # L'exΓ©cutable embarque Python et toutes les dΓ©pendances β aucune installation requise. | |
| # | |
| # Usage : | |
| # pip install pyinstaller | |
| # pyinstaller picarones.spec --noconfirm | |
| # | |
| # Sortie : | |
| # dist/picarones/picarones (Linux/macOS) | |
| # dist/picarones/picarones.exe (Windows) | |
| # | |
| # Pour un seul fichier (dΓ©marrage plus lent) : | |
| # pyinstaller picarones.spec --noconfirm --onefile | |
| import sys | |
| from pathlib import Path | |
| # Sprint A9 (m-15) β utilitaire PyInstaller pour auto-dΓ©tecter les | |
| # imports d'un package entier. Remplace la liste hiddenimports manuelle | |
| # qui dΓ©rivait silencieusement Γ chaque refactor. | |
| from PyInstaller.utils.hooks import collect_submodules # noqa: F401 | |
| # Chemin racine du projet | |
| ROOT = Path(spec_file).parent # noqa: F821 (spec_file est dΓ©fini par PyInstaller) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Analyse des dΓ©pendances | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| a = Analysis( | |
| # Point d'entrΓ©e : le script CLI principal | |
| scripts=[str(ROOT / "picarones" / "__main__.py")], | |
| # Chemins de recherche des modules | |
| pathex=[str(ROOT)], | |
| # DΓ©pendances binaires supplΓ©mentaires (DLLs, .so) | |
| binaries=[], | |
| # Fichiers de donnΓ©es Γ embarquer | |
| datas=[ | |
| # DonnΓ©es de configuration | |
| (str(ROOT / "picarones"), "picarones"), | |
| # Prompts LLM (si prΓ©sents) | |
| # (str(ROOT / "prompts"), "prompts"), | |
| ], | |
| # Sprint A9 (m-15) β auto-dΓ©tection des hiddenimports. | |
| # | |
| # Avant Sprint A9, la liste Γ©tait maintenue manuellement et | |
| # dΓ©rivait : elle rΓ©fΓ©renΓ§ait des modules qui ont migrΓ© dans | |
| # ``measurements/`` ou ``extras/`` au moment du refactor des | |
| # Cercles 1/2/3 (Sprint 33). Bug latent : la PyInstaller build | |
| # produisait un exΓ©cutable qui ratait silencieusement Γ | |
| # l'``import`` de ces modules. | |
| # | |
| # ``collect_submodules`` parcourt tout le sous-arbre du package | |
| # Γ la construction et inclut tout ce qui s'importe. Plus rien | |
| # Γ maintenir Γ la main quand on ajoute un sous-module. | |
| # | |
| # Liste explicite des dΓ©pendances tierces conservΓ©e car certaines | |
| # (PIL.ImageFilter, jiwer) ne sont pas trouvΓ©es par ``collect_submodules`` | |
| # de leur propre fait (importΓ©es paresseusement). | |
| hiddenimports=( | |
| collect_submodules("picarones") # noqa: F821 β dΓ©fini par PyInstaller | |
| + [ | |
| "click", | |
| "jiwer", | |
| "PIL", | |
| "PIL.Image", | |
| "PIL.ImageFilter", | |
| "PIL.ImageOps", | |
| "yaml", | |
| "tqdm", | |
| "numpy", | |
| "pytesseract", | |
| "defusedxml", | |
| "defusedxml.ElementTree", | |
| "sqlite3", | |
| "unicodedata", | |
| # Sprint A1 β type-checking et tests embarquΓ©s au build dev | |
| # uniquement. En build release pur, retirer. | |
| ] | |
| ), | |
| # Fichiers Γ exclure pour rΓ©duire la taille | |
| excludes=[ | |
| "tkinter", | |
| "matplotlib", | |
| "scipy", | |
| "sklearn", | |
| "pandas", | |
| "IPython", | |
| "jupyter", | |
| "notebook", | |
| ], | |
| # Options de collection | |
| win_no_prefer_redirects=False, | |
| win_private_assemblies=False, | |
| noarchive=False, | |
| ) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Archive PYZ (modules Python compilΓ©s) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| pyz = PYZ(a.pure, a.zipped_data) # noqa: F821 | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # ExΓ©cutable principal | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| exe = EXE( # noqa: F821 | |
| pyz, | |
| a.scripts, | |
| [], | |
| exclude_binaries=True, | |
| name="picarones", | |
| debug=False, | |
| bootloader_ignore_signals=False, | |
| strip=False, | |
| upx=True, # Compression UPX si disponible | |
| console=True, # Mode console (pas de fenΓͺtre graphique) | |
| disable_windowed_traceback=False, | |
| argv_emulation=False, | |
| # IcΓ΄ne (optionnelle) | |
| # icon=str(ROOT / "assets" / "picarones.ico"), | |
| ) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Collection finale (dossier dist/picarones/) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| coll = COLLECT( # noqa: F821 | |
| exe, | |
| a.binaries, | |
| a.zipfiles, | |
| a.datas, | |
| strip=False, | |
| upx=True, | |
| upx_exclude=[], | |
| name="picarones", | |
| ) | |