#!/usr/bin/env bash set -euo pipefail # =========================== # install.sh — GUI ONNX only # Ubuntu 24.04, Python 3.12 # =========================== APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" VENV_DIR="${APP_DIR}/.venv" PYTHON_BIN="${PYTHON_BIN:-python3}" GUI_MODELS="Pseudonymisation_Gui_V5.py" # nom du fichier GUI (vue unique v5) usage() { cat <<'USAGE' Usage: ./install.sh --setup # crée .venv + installe requirements (ONNX/Optimum/Transformers inclus) ./install.sh --run # lance la GUI ONNX ./install.sh --clean # supprime le venv .venv USAGE } log() { echo -e "[install] $*"; } die() { echo -e "[install:ERROR] $*" >&2; exit 1; } exists() { command -v "$1" >/dev/null 2>&1; } ensure_python() { exists "${PYTHON_BIN}" || die "Python introuvable. Installez python3 (sudo apt-get install -y python3 python3-venv)." log "Python: $(${PYTHON_BIN} -V)" } ensure_venv() { if [[ ! -d "${VENV_DIR}" ]]; then log "Création du virtualenv (.venv)…" "${PYTHON_BIN}" -m venv "${VENV_DIR}" || die "Échec création venv." fi # shellcheck disable=SC1091 source "${VENV_DIR}/bin/activate" python -m pip install --upgrade pip setuptools wheel >/dev/null } install_requirements() { # shellcheck disable=SC1091 source "${VENV_DIR}/bin/activate" [[ -f "${APP_DIR}/requirements.txt" ]] || die "requirements.txt introuvable à la racine du projet." log "Installation des dépendances (requirements.txt)…" pip install -r "${APP_DIR}/requirements.txt" # docTR pour OCR de PDF scannés (optionnel, nécessite torch) log "Installation de docTR pour l'OCR (optionnel)…" pip install "python-doctr[torch]" || log "⚠ docTR non installé (optionnel – OCR désactivé pour les PDF scannés)" } run_gui_models() { # shellcheck disable=SC1091 source "${VENV_DIR}/bin/activate" export PYTHONUTF8=1 [[ -f "${APP_DIR}/${GUI_MODELS}" ]] || die "Fichier ${GUI_MODELS} introuvable à la racine du projet." # Vérif onnxruntime python - <<'PY' || (echo "[install] ONNX Runtime manquant (vérifiez requirements)."; exit 1) import onnxruntime as ort print("onnxruntime OK:", ort.__version__) PY log "Lancement: ${GUI_MODELS}" exec python "${APP_DIR}/${GUI_MODELS}" } clean_venv() { [[ -d "${VENV_DIR}" ]] && rm -rf "${VENV_DIR}" log "Venv supprimé." } MODE="${1:-}" [[ -z "${MODE}" ]] && { usage; exit 0; } ensure_python case "${MODE}" in --setup) ensure_venv install_requirements log "✅ Installation terminée. Lancez: ./install.sh --run" ;; --run) ensure_venv run_gui_models ;; --clean) clean_venv ;; *) usage; exit 1 ;; esac