Chargement…

Importer des packages Python depuis des sous répertoires

Importer des packages Python depuis des sous répertoires

Lorsque vous travaillez dans un projet avec une arboresence comme celle-ci:

.
├── libs
│   ├── get_content.py
│   └── get_key.py
└── tests
    └── test_get_key.py

Pour importer les libs de depuis le répertoire test, cela peut s'avérer un peu tricky. Mais voici comment procéder depuis notre fichier test_get_key.py:

import os
import sys

# nous allons demander à Python de prendre aussi en considération les répertoires à partir du répertoire parent. 

parent_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')
sys.path.append(parent_dir)

# maintenant il est possible d'importer facilement toutes les libs du répertoire parent.

from libs.get_key import read_key

Rien ne vous empêche de spécifier des chemins plus complexe et de les importer.

FAQ

Pourquoi Python ne trouve-t-il pas mes modules dans un répertoire parent par défaut ?

Python ne cherche les modules que dans les répertoires définis dans sys.path, qui inclut le répertoire du script en cours mais pas ses parents. Il faut donc ajouter manuellement le chemin souhaité à sys.path avant de tenter l'import.

Est-ce que cette méthode fonctionne quel que soit l'endroit où on exécute le script ?

Oui, car os.path.abspath(file) retourne le chemin absolu du fichier en cours d'exécution, indépendamment du répertoire depuis lequel vous lancez la commande Python.

Peut-on utiliser cette approche pour accéder à des répertoires encore plus profonds dans l'arborescence ?

Tout à fait, il suffit d'adapter le chemin passé à os.path.join en ajoutant autant de segments que nécessaire pour pointer vers le bon répertoire.

Y a-t-il une alternative plus propre à la modification de sys.path ?

Oui, utiliser un fichier init.py dans chaque répertoire et structurer le projet comme un package Python installable via pip ou pyproject.toml est une approche plus robuste pour les projets de grande taille.


Poursuivre la lecture

Ecrire simplement ses tests unitaires avec Python Dev
#python#unit tests#tdd

Ecrire simplement ses tests unitaires avec Python

Adoptez TDD avec pytest pour coder en Python : écrivez vos tests unitaires avant vos fonctions pour une direction claire et un code efficace basé sur input/output.

Alexandre P.
Comment créer des mocks HTTP en Python Dev
#python#tests unitaires#responses

Comment créer des mocks HTTP en Python

Apprenez à utiliser des mocks avec pytest pour éviter les appels API impactants (paiement, suppression) et sécuriser vos tests unitaires efficacement.

Alexandre P.