Installation Éditable en Python : Résoudre les Erreurs d'Importation

Problème résolu par le mode Installation Éditable

En développement Python, modifier localement des packages et tester immédiatement les changements est fréquent. L'installation éditable évite de réinstaller systématiquement les packages après chaque modification.

Principe de fonctionnement

Ce mode crée un lien symbolique entre le code source et l'environnement Python via pip install -e . :

  1. Un lien symbolique est établi vers le répertoire source dans site-packages
  2. Python charge dynamiquement les ficihers sources lors de l'import
  3. Les dépendances restant gérées par pyproject.toml ou requirements.txt

Configuration de base

Projet traditionnel (setup.py)

# Création du projet
mkdir mon_projet && cd mon_projet
touch setup.py

# Installation éditable
pip install -e .

Projet moderne (pyproject.toml)

# pyproject.toml
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "mon_projet"
version = "0.1.0"
dependencies = ["requests>=2.25"]

Structure de projet type

RACINE_PROJET
├─bin
├─config
├─src
│  ├─module_principal
│  ├─services
│  │  └─journalisation  
│  └─outils
└─tests

Fichiers de configuration essentiels

pyproject.toml

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "Projet_IA"
version = "1.0.0"

[tool.setuptools]
package-dir = { "" = "src" }

setup.py

from setuptools import setup, find_packages

setup(
    name="Projet_IA",
    version="1.0.0",
    packages=find_packages(where="src"),
    package_dir={"": "src"},
    install_requires=["requests>=2.21.0", "python-dotenv>=0.19.0"],
    python_requires=">=3.10"
)

Initialisation des modules

Créer des fichiers __init__.py dans chaque répertoire de module.

Mise en œuvre

# Exécuter dans la racine du projet
pip install -e .

# Vérification
python -c "import module_principal; print(module_principal)"

Automatisation

Script d'installation

import os
import subprocess
import sys

chemin_racine = os.path.abspath(os.path.dirname(__file__))
os.chdir(chemin_racine)
subprocess.run([sys.executable, "-m", "pip", "install", "-e", "."])

Script de désinstallation

import os
import subprocess
import sys

chemin_racine = os.path.abspath(os.path.dirname(__file__))
os.chdir(chemin_racine)
subprocess.run([sys.executable, "-m", "pip", "uninstall", "-y", "Projet_IA"])

Avantages clés

  • Modifications du code immédiatement effectives
  • Environnemenst cohérents entre développement et production
  • Gestion simplifiée des dépendances
  • Intégration transparente avec les outils modernes

Étiquettes: Python Installation-Editable pip pyproject-toml setuptools

Publié le 5 juillet à 23h40