Spaces:
Sleeping
Sleeping
| # Makefile β Picarones | |
| # Usage : make <cible> | |
| # Cibles principales : install, test, demo, serve, build, build-exe, docker-build, clean | |
| build build-exe docker-build docker-run docker-compose-up clean help | |
| PYTHON := python3 | |
| PIP := pip | |
| VENV := .venv | |
| VENV_BIN := $(VENV)/bin | |
| PICARONES := $(VENV_BIN)/picarones | |
| PYTEST := $(VENV_BIN)/pytest | |
| PACKAGE := picarones | |
| # Couleurs | |
| BOLD := \033[1m | |
| GREEN := \033[32m | |
| CYAN := \033[36m | |
| RESET := \033[0m | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Aide | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| help: ## Affiche cette aide | |
| @echo "" | |
| @echo "$(BOLD)Picarones β Commandes disponibles$(RESET)" | |
| @echo "" | |
| @grep -E '^[a-zA-Z_-]+:.*## ' $(MAKEFILE_LIST) \ | |
| | sort \ | |
| | awk 'BEGIN {FS = ":.*## "}; {printf " $(CYAN)%-18s$(RESET) %s\n", $$1, $$2}' | |
| @echo "" | |
| all: install test ## Installer et tester | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Installation | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| $(VENV): | |
| $(PYTHON) -m venv $(VENV) | |
| install: $(VENV) ## Installe Picarones en mode Γ©ditable (dΓ©pendances de base) | |
| $(VENV_BIN)/pip install --upgrade pip | |
| $(VENV_BIN)/pip install -e . | |
| @echo "$(GREEN)β Installation de base terminΓ©e$(RESET)" | |
| @echo " Activez l'environnement : source $(VENV)/bin/activate" | |
| install-dev: $(VENV) ## Installe avec les dΓ©pendances de dΓ©veloppement (tests, lint) | |
| $(VENV_BIN)/pip install --upgrade pip | |
| $(VENV_BIN)/pip install -e ".[dev]" | |
| @echo "$(GREEN)β Installation dev terminΓ©e$(RESET)" | |
| install-web: $(VENV) ## Installe avec l'interface web (FastAPI + uvicorn) | |
| $(VENV_BIN)/pip install --upgrade pip | |
| $(VENV_BIN)/pip install -e ".[web,dev]" | |
| @echo "$(GREEN)β Installation web terminΓ©e$(RESET)" | |
| install-all: $(VENV) ## Installe avec tous les extras (web, HuggingFace, dev) | |
| $(VENV_BIN)/pip install --upgrade pip | |
| $(VENV_BIN)/pip install -e ".[web,hf,dev]" | |
| @echo "$(GREEN)β Installation complΓ¨te terminΓ©e$(RESET)" | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Tests | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| test: ## Lance la suite de tests complète | |
| $(PYTEST) tests/ -q --tb=short | |
| @echo "$(GREEN)β Tests terminΓ©s$(RESET)" | |
| test-cov: ## Tests avec rapport de couverture HTML | |
| $(PYTEST) tests/ --cov=$(PACKAGE) --cov-report=html --cov-report=term-missing -q | |
| @echo "$(GREEN)β Rapport de couverture : htmlcov/index.html$(RESET)" | |
| test-fast: ## Tests rapides uniquement (exclut les tests lents) | |
| $(PYTEST) tests/ -q --tb=short -x | |
| test-sprint9: ## Tests Sprint 9 uniquement | |
| $(PYTEST) tests/test_sprint9_packaging.py -v | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # QualitΓ© du code | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| lint: ## VΓ©rifie le style du code (ruff si disponible, sinon flake8) | |
| @if command -v ruff > /dev/null 2>&1; then \ | |
| ruff check $(PACKAGE)/ tests/; \ | |
| elif $(VENV_BIN)/python -m ruff --version > /dev/null 2>&1; then \ | |
| $(VENV_BIN)/python -m ruff check $(PACKAGE)/ tests/; \ | |
| elif command -v flake8 > /dev/null 2>&1; then \ | |
| flake8 $(PACKAGE)/ tests/ --max-line-length=100 --ignore=E501,W503; \ | |
| else \ | |
| echo "Aucun linter disponible (installez ruff : pip install ruff)"; \ | |
| fi | |
| typecheck: ## VΓ©rification de types avec mypy (si installΓ©) | |
| @$(VENV_BIN)/python -m mypy $(PACKAGE)/ --ignore-missing-imports --no-strict-optional 2>/dev/null \ | |
| || echo "mypy non installΓ© : pip install mypy" | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # DΓ©monstration | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| demo: ## Génère un rapport de démonstration complet (rapport_demo.html) | |
| $(PICARONES) demo --docs 12 --output rapport_demo.html \ | |
| --with-history --with-robustness | |
| @echo "$(GREEN)β Rapport demo : rapport_demo.html$(RESET)" | |
| @echo " Ouvrez : file://$(PWD)/rapport_demo.html" | |
| demo-json: ## Génère rapport demo + export JSON | |
| $(PICARONES) demo --docs 12 --output rapport_demo.html --json-output resultats_demo.json | |
| @echo "$(GREEN)β Rapport : rapport_demo.html | JSON : resultats_demo.json$(RESET)" | |
| demo-history: ## DΓ©monstration du suivi longitudinal | |
| $(PICARONES) history --demo --regression | |
| demo-robustness: ## DΓ©monstration de l'analyse de robustesse | |
| mkdir -p /tmp/picarones_demo_corpus | |
| $(PICARONES) robustness \ | |
| --corpus /tmp/picarones_demo_corpus \ | |
| --engine tesseract \ | |
| --demo \ | |
| --degradations noise,blur,rotation | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Serveur web | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| serve: ## Lance l'interface web locale (http://localhost:8000) | |
| $(PICARONES) serve --host 127.0.0.1 --port 8000 | |
| serve-public: ## Lance le serveur en mode public (0.0.0.0:8000) | |
| $(PICARONES) serve --host 0.0.0.0 --port 8000 | |
| serve-dev: ## Lance le serveur en mode dΓ©veloppement (rechargement automatique) | |
| $(PICARONES) serve --reload --verbose | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Build & packaging | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| build: ## Construit la distribution Python (wheel + sdist) | |
| $(VENV_BIN)/pip install --upgrade build | |
| $(VENV_BIN)/python -m build | |
| @echo "$(GREEN)β Distribution : dist/$(RESET)" | |
| build-exe: ## Génère un exécutable standalone avec PyInstaller | |
| @echo "$(CYAN)Construction de l'exΓ©cutable standaloneβ¦$(RESET)" | |
| $(VENV_BIN)/pip install pyinstaller | |
| $(VENV_BIN)/pyinstaller picarones.spec --noconfirm | |
| @echo "$(GREEN)β ExΓ©cutable : dist/picarones/$(RESET)" | |
| build-exe-onefile: ## Génère un exécutable unique (plus lent au démarrage) | |
| $(VENV_BIN)/pip install pyinstaller | |
| $(VENV_BIN)/pyinstaller picarones.spec --noconfirm --onefile | |
| @echo "$(GREEN)β ExΓ©cutable : dist/picarones$(RESET)" | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Docker | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| docker-build: ## Construit l'image Docker Picarones | |
| docker build -t picarones:latest -t picarones:1.0.0 . | |
| @echo "$(GREEN)β Image Docker : picarones:latest$(RESET)" | |
| docker-run: ## Lance Picarones dans Docker (http://localhost:8000) | |
| docker run --rm -p 8000:8000 \ | |
| -e OPENAI_API_KEY="$${OPENAI_API_KEY:-}" \ | |
| -e ANTHROPIC_API_KEY="$${ANTHROPIC_API_KEY:-}" \ | |
| -e MISTRAL_API_KEY="$${MISTRAL_API_KEY:-}" \ | |
| -v "$(PWD)/corpus:/app/corpus:ro" \ | |
| picarones:latest | |
| docker-compose-up: ## Lance Picarones + Ollama avec Docker Compose | |
| docker compose up -d | |
| @echo "$(GREEN)β Services dΓ©marrΓ©s$(RESET)" | |
| @echo " Picarones : http://localhost:8000" | |
| @echo " Ollama : http://localhost:11434" | |
| docker-compose-down: ## ArrΓͺte les services Docker Compose | |
| docker compose down | |
| docker-compose-logs: ## Affiche les logs Docker Compose | |
| docker compose logs -f picarones | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Nettoyage | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| clean: ## Supprime les fichiers gΓ©nΓ©rΓ©s (cache, build, dist) | |
| find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true | |
| find . -type f -name "*.pyc" -delete 2>/dev/null || true | |
| find . -type f -name "*.pyo" -delete 2>/dev/null || true | |
| find . -type d -name "*.egg-info" -exec rm -rf {} + 2>/dev/null || true | |
| rm -rf dist/ build/ .eggs/ htmlcov/ .coverage .pytest_cache/ | |
| @echo "$(GREEN)β Nettoyage terminΓ©$(RESET)" | |
| clean-all: clean ## Supprime aussi l'environnement virtuel | |
| rm -rf $(VENV)/ | |
| @echo "$(GREEN)β Environnement virtuel supprimΓ©$(RESET)" | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Utilitaires | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| info: ## Affiche les informations de version Picarones | |
| $(PICARONES) info | |
| engines: ## Liste les moteurs OCR disponibles | |
| $(PICARONES) engines | |
| history-demo: ## Affiche l'historique de dΓ©monstration | |
| $(PICARONES) history --demo --regression | |
| changelog: ## Affiche le CHANGELOG | |
| @cat CHANGELOG.md | head -80 | |
| version: ## Affiche la version courante | |
| @grep -m1 'version' pyproject.toml | awk '{print $$3}' | tr -d '"' | |