import os from pathlib import Path # Spec CLI frozen — EXE de PRODUCTION (anonymisation fichier unique sans GUI). # Même moteur / mêmes datas que anonymisation_onefile.spec, mais : # - entrypoint = scripts/anonymize_cli.py (CLI production, pas launcher.py) # Contrat : Anonymisation-CLI.exe # Modèle CamemBERT-bio ONNX OBLIGATOIRE (fail-closed, code 3 si absent). # - console=True (CLI), pas de Splash # - name = Anonymisation-CLI -> ne remplace pas dist/Anonymisation.exe # (Le harnais perf D-19 reste scripts/anonymize_batch_cli.py, non buildé ici.) block_cipher = None project_dir = Path(globals().get("SPECPATH", os.getcwd())).resolve() def _data_entry(relative_path: str, target_dir: str | None = None): src = project_dir / relative_path if not src.exists(): return None return (str(src), target_dir or relative_path) datas = [] for relative_path, target_dir in [ ("config", "config"), ("data/bdpm", "data/bdpm"), ("data/finess", "data/finess"), ("data/insee", "data/insee"), ("models/camembert-bio-deid/onnx", "models/camembert-bio-deid/onnx"), ("detectors", "detectors"), ("scripts", "scripts"), ("assets", "assets"), ]: entry = _data_entry(relative_path, target_dir) if entry is not None: datas.append(entry) for relative_path in [ "data/stopwords_manuels.txt", "data/villes_blacklist.txt", "data/dpi_labels_blacklist.txt", "data/companion_blacklist.txt", ]: entry = _data_entry(relative_path, "data") if entry is not None: datas.append(entry) hiddenimports = [ "anonymizer_core_refactored_onnx", "admin_rules", "config_defaults", "profile_defaults", "gui_batch_paths", "manual_masking", "pdf_mask_designer", "format_converter", "ner_manager_onnx", "camembert_ner_manager", "eds_pseudo_manager", "gliner_manager", "vlm_manager", "build_info", "doctr", "doctr.io", "doctr.models", "doctr.models.detection", "doctr.models.recognition", "cv2", "torchvision", "edsnlp", "edsnlp.pipes", "edsnlp.pipes.ner", "edsnlp.pipes.ner.pseudo", "spacy", "spacy.lang.fr", "gliner", "onnxruntime", "transformers", "tokenizers", "torch", "pdfplumber", "fitz", "PIL", "yaml", "loguru", "regex", "optimum", "optimum.onnxruntime", "optimum.pipelines", "optimum.modeling_base", "optimum.exporters.onnx", ] a = Analysis( [str(project_dir / "scripts" / "anonymize_cli.py")], pathex=[str(project_dir)], datas=datas, hiddenimports=hiddenimports, cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name="Anonymisation-CLI", debug=False, strip=False, upx=False, console=True, )