J'essaie d'importer un module à partir d'un répertoire particulier.
Le problème est que si j'utilise sys.path.append(mod_directory)
pour ajouter le chemin, puis que j'ouvre l'interpréteur python, le répertoire mod_directory
est ajouté à la fin de la liste sys.path. Si j'exporte la variable PYTHONPATH
avant d'ouvrir l'interpréteur python, le répertoire est ajouté au début de la liste. Dans ce dernier cas, je peux importer le module, mais dans le premier cas, je ne le peux pas.
Quelqu'un peut-il expliquer pourquoi cela se produit et me donner une solution pour ajouter le mod_directory
au début, inside un script python?
Cela fonctionne comme documenté. Tous les chemins spécifiés dans PYTHONPATH
sont documentés comme venant normalement après le répertoire de travail, mais avant les chemins fournis par l'interpréteur standard. sys.path.append()
s'ajoute au chemin existant. Voir ici et ici . Si vous voulez qu'un répertoire particulier vienne en premier, insérez-le simplement à la tête de sys.path:
import sys
sys.path.insert(0,'/path/to/mod_directory')
Cela dit, il existe généralement de meilleurs moyens de gérer les importations que d'utiliser PYTHONPATH
ou de manipuler sys.path
directement. Voir, par exemple, les réponses à cette question .
Vous pouvez utiliser:
import os
path = 'the path you want'
os.environ['PATH'] += ':'+path
Quant à moi, je dois caffe à mon chemin de python. Je peux ajouter son chemin au fichier /home/xy/.bashrc
par add
export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH
.
dans mon fichier /home/xy/.bashrc
.
Mais quand j'utilise pycharm, le chemin n'est pas encore entré.
Je peux donc ajouter un chemin à la variable PYTHONPATH
, par exécution -> modifier la configuration.
Lorsque vous exécutez un script Python à partir de Powershell sous Windows, cela devrait fonctionner:
$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"
# Now run the actual script
python your_script.py
Changer temporairement les répertoires fonctionne bien pour importer:
cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)