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)?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top