Come faccio a sapere il mio percorso Python usando Python?
-
18-09-2019 - |
Domanda
Come faccio a sapere che le directory sono elencati nella variabile PYTHONPATH
del mio sistema, dall'interno di uno script Python (o la shell interattiva)?
Soluzione
sys.path
potrebbe includere elementi che non sono specificamente nella variabile di ambiente PYTHONPATH
. Per interrogare la variabile direttamente, utilizzare:
import os
try:
user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
user_paths = []
Altri suggerimenti
E 'probabile che anche voler questo:
import sys
print(sys.path)
O come uno di linea dal terminale:
python -c "import sys; print('\n'.join(sys.path))"
Non riesco a modificare l'altra risposta. Ha un piccolo errore in quanto è solo per Windows. La soluzione più generica è quella di utilizzare os.sep come di seguito:
sys.path potrebbe includere elementi che non sono specificamente nella variabile di ambiente PYTHONPATH. Per interrogare la variabile direttamente, utilizzare:
import os
os.environ['PYTHONPATH'].split(os.pathsep)
PYTHONPATH è una variabile di ambiente il cui valore è un elenco di directory. Una volta impostato, è usato da Python per la ricerca di moduli importati, insieme ad altri std. e directory di libreria 3rd-party elencati in "sys.path" di Python.
Come tutte le altre variabili d'ambiente, è possibile esportarlo in guscio o in ~ / .bashrc, vedere qui . È possibile eseguire una query os.environ [ 'PYTHONPATH'] per il suo valore in Python come illustrato di seguito:
$ python3 -c "import os, sys; print(os.environ['PYTHONPATH']); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"
IF definito shell come
$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite
THEN risultato =>
/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']
Risultati ELSE =>
PYTHONPATH is not defined
Per impostare PYTHONPATH a più percorsi, vedere qui .
Si noti che si può aggiungere o eliminare un percorso di ricerca tramite sys.path.insert (), del o rimuovere () in fase di esecuzione, ma non attraverso os.environ []. Esempio:
>>> 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']
>>>
In sintesi, PYTHONPATH è un modo di specificare il percorso di ricerca di Python (s) per moduli importati in sys.path. È inoltre possibile applicare operazioni lista direttamente a sys.path senza l'ausilio di PYTHONPATH.