web-dev-qa-db-fra.com

ajout d'un répertoire à sys.path/PYTHONPATH

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?

93

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 .

128
Ned Deily

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.

 enter image description here

3
Jayhello

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
0
Alexander Pacha

Changer temporairement les répertoires fonctionne bien pour importer:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)
0
user3517603