2009-09-28 20 views
249

Come scoprire quali directory sono elencate nella variabile PYTHONPATH del mio sistema, all'interno di uno script Python (o della shell interattiva)?Come posso trovare il mio percorso Python usando python?

+20

io non sono sicuro di quello che stai cercando di fare, ma se vuoi sapere quali cartelle sono usate per cercare i moduli da importare non devi fare affidamento su 'PYTHONPATH'. Usa 'sys.path' per quello. – Vanuan

+0

Per semplice esperimento, ho trovato la risposta di Vanuan in basso (stampando sys.path), stampa solo PYTHONPATH. Questo funziona dopo aver modificato il valore usando add_path (new_path) che aggiunge a PYTHONPATH. –

+4

Il titolo di questo post e il corpo fanno due domande diverse. 'sys.path' è" Un elenco di stringhe che specifica il percorso di ricerca per i moduli "- https://docs.python.org/2/library/sys.html#sys.path. PYTHONPATH è una variabile di ambiente che effettua questo elenco. Con ogni ragionevole definizione 'sys.path' è il tuo" percorso python ". – spinkus

risposta

166

sys.path potrebbe includere elementi che non sono specificatamente nella variabile di ambiente PYTHONPATH. Per interrogare direttamente la variabile, utilizzare:

import os 
try: 
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep) 
except KeyError: 
    user_paths = [] 
+1

(o, più genericamente ... split (os.sep)). Non riesco a capire perché non stai ricevendo l'amore, Mark. La tua risposta è tecnicamente più accurata della risposta di Paul D Waite alla sua domanda ???? – mjv

+0

Ah, eccellente. Grazie ragazzi, sospettavo che stavo facendo qualcosa di sbagliato. Ho cancellato la mia risposta sbagliata; Segna, se puoi modificare la tua risposta per includere il bit os.sep, i punti saranno giustamente tuoi. –

+4

os.sep non è corretto, consultare http://stackoverflow.com/questions/1499019/how-to-get-the-path-separator-in-python –

11

Non riesco a modificare l'altra risposta. Ha un piccolo errore in quanto è solo per Windows. La soluzione più generica è utilizzare os.sep come segue:

sys.path potrebbe includere elementi che non sono specificatamente nella variabile di ambiente PYTHONPATH. Per interrogare la variabile direttamente, utilizzare:

import os 
os.environ['PYTHONPATH'].split(os.pathsep) 
+4

Per i futuri lettori: 'os.sep' restituisce il separatore di directory per il sistema operativo , per esempio '/'. Il separatore utilizzato nel percorso Python è diverso e restituito da 'os.pathsep' come mostrato nella risposta accettata. –

+0

nessun motivo per l'importazione sys qui, giusto? – Nathan

412

Probabilmente vorrebbe anche questo:

import sys 
print(sys.path) 

O come uno di linea dal terminale:

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

Stesso. Linux aaa.com 2.6.18-4-686-bigmem # 1 SMP Wed 6 giugno 09:41:07 UTC 2007 i686 GNU/Linux ... Debian Sarge – Spechal

+6

Questo è il modo indipendente dalla piattaforma e dall'ambiente per ottenere l'attuale il percorso python del runtime. –

+9

Questa risposta è stata molto più utile per la mia situazione rispetto alla risposta accettata. So quali sono le mie variabili di ambiente. Avevo bisogno di sapere dove Python ha deciso di puntare oltre la mia variabile di ambiente. – Vorticity

Problemi correlati