web-dev-qa-db-fra.com

Comment trouver mon chemin python en utilisant python?

Comment savoir quels répertoires sont répertoriés dans la variable PYTHONPATH de mon système, à partir d’un script Python (ou du shell interactif)?

285
Paul D. Waite

sys.path peut inclure des éléments qui ne sont pas spécifiquement dans votre variable d'environnement PYTHONPATH. Pour interroger directement la variable, utilisez:

import os
try:
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
    user_paths = []
189
Mark Ransom

Vous voudriez probablement aussi ceci:

import sys
print(sys.path)

Ou en une ligne depuis le terminal:

python -c "import sys; print('\n'.join(sys.path))"
493
Vanuan

Je n'arrive pas à éditer l'autre réponse. A une erreur mineure en ce qu'il est uniquement Windows. La solution plus générique consiste à utiliser os.sep comme ci-dessous:

sys.path peut inclure des éléments qui ne sont pas spécifiquement dans votre variable d'environnement PYTHONPATH. Pour interroger directement la variable, utilisez:

import os
os.environ['PYTHONPATH'].split(os.pathsep)
10
Vitali

PYTHONPATH est une variable d'environnement dont la valeur est une liste de répertoires. Une fois défini, il est utilisé par Python pour rechercher les modules importés, ainsi que d’autres fichiers std. et répertoires de bibliothèques tierces répertoriés dans "sys.path" de Python. 

Comme toute autre variable d'environnement, vous pouvez l'exporter dans Shell ou dans ~/.bashrc, voir ici . Vous pouvez interroger os.environ ['PYTHONPATH'] pour connaître sa valeur en Python, comme indiqué ci-dessous:

$ python3 -c "import os, sys; print(os.environ['PYTHONPATH']); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"

SI défini dans Shell comme 

$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite

ALORS résultat =>

/home/Documents/DjangoTutorial/mysite
['', '/home/Documents/DjangoTutorial/mysite', '/usr/local/lib/python37.Zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

ELSE resultat =>

PYTHONPATH is not defined

Pour définir PYTHONPATH sur plusieurs chemins, voir ici .

Notez que vous pouvez ajouter ou supprimer un chemin de recherche via sys.path.insert (), del ou remove () au moment de l'exécution, mais PAS via os.environ [] . Exemple:

>>> os.environ['PYTHONPATH']="$HOME/Documents/DjangoTutorial/mysite"
>>> 'PYTHONPATH' in sorted(os.environ)
True
>>> sys.path // but Not there
['', '/usr/local/lib/python37.Zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

>>> sys.path.insert(0,os.environ['PYTHONPATH'])
>>> sys.path // It's there
['$HOME/Documents/DjangoTutorial/mysite', '', '/usr/local/lib/python37.Zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']
>>> 

En résumé, PYTHONPATH est un moyen de spécifier le ou les chemins de recherche Python pour les modules importés dans sys.path. Vous pouvez également appliquer des opérations de liste directement à sys.path sans l'aide de PYTHONPATH. 

1
Leon Chang