Dans le script Python, comment définir PYTHONPATH?


115

Je sais comment le définir dans mon / etc / profile et dans mes variables d'environnement.

Mais que faire si je veux le définir pendant un script? S'agit-il d'import os, sys? Comment fait-on ça?

Réponses:


192

Vous ne définissez pas PYTHONPATH, vous ajoutez des entrées sys.path. C'est une liste de répertoires dans lesquels rechercher les packages Python, vous pouvez donc simplement ajouter vos répertoires à cette liste.

sys.path.append('/path/to/whatever')

En fait, sys.pathest initialisé en divisant la valeur de PYTHONPATHsur le caractère séparateur de chemin ( :sur les systèmes de type Linux, ;sous Windows).

Vous pouvez également ajouter des répertoires à l'aide de site.addsitedir, et cette méthode prendra également en compte les .pthfichiers existant dans les répertoires que vous passez. (Ce ne serait pas le cas avec les répertoires que vous spécifiez PYTHONPATH.)


11
Cela fait de nombreuses années que cette réponse a été publiée, mais je veux quand même ajouter que si vous voulez vous assurer que Python vérifie le nouveau répertoire avant tous les autres lors de l'importation, vous devez mettre le nouveau répertoire en premier dans la liste, comme dans sys.path.insert(0, '/path/to/whatever').
wecsam

39

Vous pouvez obtenir et définir des variables d'environnement via os.environ:

import os
user_home = os.environ["HOME"]

os.environ["PYTHONPATH"] = "..."

Mais puisque votre interpréteur est déjà en cours d'exécution, cela n'aura aucun effet. Vous feriez mieux d'utiliser

import sys
sys.path.append("...")

qui est le tableau dans lequel vous PYTHONPATHserez transformé au démarrage de l'interpréteur.


18

Si vous mettez sys.path.append('dir/to/path')sans cocher il est déjà ajouté, vous pourriez générer une longue liste au format sys.path. Pour cela, je recommande ceci:

import sys
import os # if you want this directory

try:
    sys.path.index('/dir/path') # Or os.getcwd() for this directory
except ValueError:
    sys.path.append('/dir/path') # Or os.getcwd() for this directory

2
Agréable. Très pythonique.
PartialOrder

1
Comment puis-je vider le PythonPath? Je ne veux pas ajouter. Je veux le vider et mettre ce que je veux seulement à l'intérieur. Y a-t-il un moyen de faire cela?
Schütze

Avez-vous essayé de le réinitialiser en appelant sys.path .__ init __ ()? Cela devrait vider le chemin python. J'espère que cela t'aides.
Thayz

@ francisco-manuel-garca-botella Répondre à de vieilles questions est le bienvenu sur ce site! Rien à redire.
user7610

Je ne suis pas d'accord pour dire que c'est pythonique, et je dirais que ce n'est pas une bonne approche de programmation. La gestion des exceptions est très coûteuse lorsque l'exception se produit, vous ne voulez donc pas l'utiliser pour remplacer une instruction "if" où il est tout à fait possible que vous utilisiez l'autre. Un simple if 'mypath' dans sys.path ... else ... serait mon conseil.
markgalassi

6

PYTHONPATH se termine dans sys.path , que vous pouvez modifier au moment de l'exécution.

import sys
sys.path += ["whatever"]

Y a-t-il une raison de préférer cette réponse à celle de @DavidZ?
Dror

Si rien d'autre, c'est moins verbeux.
tripleee

-1

vous pouvez définir PYTHONPATH, par os.environ['PATHPYTHON']=/some/path, puis vous devez appeler os.system('python')pour redémarrer le shell python pour rendre le chemin nouvellement ajouté efficace.


1
os.system()ne "redémarre pas le shell python", il démarre une nouvelle instance Python interactive. Lorsque vous revenez de cela, vous êtes de retour dans le script d'appel.
tripleee

-2

Je Linux cela fonctionne aussi:

import sys
sys.path.extend(["/path/to/dotpy/file/"])
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.