diff --git a/Pseudonymisation_Gui_V5.py b/Pseudonymisation_Gui_V5.py index 2aad33f..06e0f2a 100644 --- a/Pseudonymisation_Gui_V5.py +++ b/Pseudonymisation_Gui_V5.py @@ -22,6 +22,7 @@ import queue import re import shutil import subprocess +import sys import threading from dataclasses import dataclass, field from pathlib import Path @@ -89,10 +90,39 @@ APP_TITLE = "Pseudonymisation de vos documents" APP_VERSION = "v5.4" def _app_dir() -> Path: - """Répertoire racine de l'application (compatible Nuitka standalone).""" + """Répertoire racine de l'application (compatible PyInstaller/Nuitka).""" + if getattr(sys, 'frozen', False): + return Path(sys._MEIPASS) return Path(__file__).resolve().parent -DEFAULT_CFG = _app_dir() / "config" / "dictionnaires.yml" +def _exe_dir() -> Path: + """Répertoire de l'exécutable (pour les fichiers persistants : config, logs).""" + if getattr(sys, 'frozen', False): + return Path(sys.executable).parent + return Path(__file__).resolve().parent + +def _resolve_config() -> Path: + """Cherche la config en priorité à côté de l'exe, sinon dans l'app embarquée. + + Si le fichier n'existe pas à côté de l'exe, copie la version embarquée + pour que l'utilisateur puisse la modifier sans recompiler. + """ + exe_cfg = _exe_dir() / "config" / "dictionnaires.yml" + app_cfg = _app_dir() / "config" / "dictionnaires.yml" + + if exe_cfg.exists(): + return exe_cfg + + # Premier lancement : copier la config embarquée à côté de l'exe + if app_cfg.exists(): + exe_cfg.parent.mkdir(parents=True, exist_ok=True) + import shutil + shutil.copy2(str(app_cfg), str(exe_cfg)) + return exe_cfg + + return app_cfg # fallback + +DEFAULT_CFG = _resolve_config() MODELS_DIR = _app_dir() / "models" DEFAULTS_CFG_TEXT = r"""