
En Python, la liste des répertoires recherchés lors de l’importation de modules et de packages avec import, le chemin de recherche du module, est stockée dans sys.path.
Cet article décrit comment vérifier les chemins de recherche actuels du module et en ajouter de nouveaux.
- Vérifiez le chemin de recherche du module avec sys.path
- Ajouter un nouveau chemin de recherche de module avec sys.path.append()
- Ajouter un nouveau chemin de recherche de module avec PYTHONPATH
- Ajouter un nouveau chemin de recherche de module avec le fichier de configuration de chemin (.pth)
Consultez l’article suivant pour l’utilisation de base de l’importation.
Vérifiez le chemin de recherche du module avec sys.path
Le chemin de recherche du module actuel est stocké dans sys.path.
sys.path est une liste de chaînes spécifiant le chemin de recherche du module. Vous pouvez vérifier les éléments avec print().
Dans cet exemple, pprint est utilisé pour faciliter la lecture.
import sys
import pprint
pprint.pprint(sys.path)
Une fois exécuté, le résultat est le suivant.
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook
python3 print_sys_path.py
# ['/Users/mbp/Documents/my-project/python-snippets/notebook',
# '/Users/mbp/Documents/lib',
# '/Users/mbp/Documents/my-project/python-snippets/notebook',
# '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
# '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
# '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
# '/usr/local/lib/python3.7/site-packages']
Le résultat dépend de l’environnement. Dans l’exemple d’environnement (Mac avec Python3 installé par Homebrew), les répertoires suivants sont stockés dans sys.path.
- Le répertoire contenant le fichier de script exécuté (.py)
- Le répertoire défini par la variable d’environnement PYTHONPATH (voir ci-dessous pour plus de détails)
- Le répertoire de travail courant
- Trois répertoires pour la bibliothèque standard
- Le répertoire site-packages pour les bibliothèques tierces installées avec pip
Si vous déplacez le répertoire courant dans le terminal et que vous l’exécutez à nouveau, 3. le répertoire courant passe à un autre chemin.
cd ..
pwd
# /Users/mbp/Documents/my-project/python-snippets
python3 notebook/print_sys_path.py
# ['/Users/mbp/Documents/my-project/python-snippets/notebook',
# '/Users/mbp/Documents/lib',
# '/Users/mbp/Documents/my-project/python-snippets',
# '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
# '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
# '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
# '/usr/local/lib/python3.7/site-packages']
Étant donné que le chemin de recherche du module change en fonction du répertoire en cours, l’importation peut ne pas fonctionner en fonction de l’endroit où le fichier de script est exécuté.
Les modules sont recherchés dans l’ordre de sys.path. Par conséquent, les modules du répertoire contenant le fichier de script exécuté (.py) sont recherchés en premier. Notez que s’il existe un fichier portant le même nom que la bibliothèque standard dans le même répertoire que le fichier de script exécuté, ce fichier est importé.
Ajouter un nouveau chemin de recherche de module avec sys.path.append()
Comme sys.path n’est qu’une liste, vous pouvez ajouter de nouveaux chemins. Dans cet exemple, la méthode append() est utilisée, mais vous pouvez également utiliser la méthode insert() et ainsi de suite.
Si vous importez après avoir ajouté un chemin à sys.path, vous pouvez importer les modules dans le chemin ajouté.
Par exemple, si vous souhaitez ajouter un répertoire un niveau au-dessus du fichier de script, vous pouvez écrire ce qui suit.
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
L’ajout à sys.path n’est actif que dans ce code. Si vous souhaitez ajouter des chemins de manière permanente, utilisez les fichiers PYTHONPATH ou .pth décrits ci-après.
Ajouter un nouveau chemin de recherche de module avec PYTHONPATH
Utilisez la variable d’environnement PYTHONPATH pour ajouter de façon permanente le chemin de recherche du module.
Pour les systèmes d’exploitation de type Unix, y compris Mac, ajoutez ce qui suit à ~/.bashrc, par exemple. Pour spécifier plusieurs chemins, séparez-les par deux-points :.
export PYTHONPATH="/path/to/add:$PYTHONPATH"
Sous Windows, vous pouvez ajouter PYTHONPATH ainsi que des variables d’environnement normales en cliquant avec le bouton droit sur votre PC (Poste de travail) -> Système -> Propriétés système -> Variables d’environnement. Sous Windows, séparez plusieurs chemins par un point-virgule ;.
Le répertoire ‘/Users/mbp/Documents/lib’ dans l’exemple ci-dessus est ajouté à PYTHONPATH.
Ajouter un nouveau chemin de recherche de module avec le fichier de configuration de chemin (.pth)
Si vous placez un fichier de configuration de chemin (.pth) dans le répertoire site-packages, vous pouvez ajouter des chemins de recherche de module.
Le fichier de configuration de chemin (.pth) doit contenir un chemin par ligne. Il peut s’agir d’un chemin relatif ou d’un chemin absolu. Il est possible d’écrire un commentaire avec #. Le nom de fichier peut être n’importe quoi tant que l’extension est pth.
