Nello script Python, come imposto PYTHONPATH?


115

So come impostarlo nel mio / etc / profile e nelle mie variabili d'ambiente.

Ma cosa succede se voglio impostarlo durante uno script? È import os, sys? Come lo faccio?

Risposte:


192

Non si imposta PYTHONPATH, si aggiungono voci a sys.path. È un elenco di directory in cui cercare i pacchetti Python, quindi puoi semplicemente aggiungere le tue directory a quell'elenco.

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

Infatti, sys.pathviene inizializzato suddividendo il valore di PYTHONPATHsul carattere separatore di percorso ( :su sistemi tipo Linux, ;su Windows).

Puoi anche aggiungere directory usando site.addsitedir, e quel metodo terrà conto anche dei .pthfile esistenti all'interno delle directory che passi. (Questo non sarebbe il caso delle directory in cui specifichi PYTHONPATH.)


11
Sono passati molti anni da quando questa risposta è stata pubblicata, ma voglio comunque aggiungere che se vuoi assicurarti che Python controlli la nuova directory prima di tutte le altre durante l'importazione, dovresti mettere la nuova directory per prima nell'elenco, come in sys.path.insert(0, '/path/to/whatever').
wecsam

39

Puoi ottenere e impostare le variabili d'ambiente tramite os.environ:

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

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

Ma poiché il tuo interprete è già in esecuzione, ciò non avrà alcun effetto. Stai meglio usando

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

che è l'array in cui PYTHONPATHverrà trasformato all'avvio dell'interprete.


18

Se lo metti sys.path.append('dir/to/path')senza spunta è già aggiunto, potresti generare un lungo elenco in formato sys.path. Per questo, consiglio questo:

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
Bello. Molto pitonico.
Ordine parziale

1
Come posso svuotare il PythonPath? Non voglio aggiungere. Voglio svuotarlo e metterci dentro quello che voglio solo. C'è un modo per fare questo?
Schütze

Hai provato a reinizializzarlo chiamando sys.path .__ init __ ()? Questo dovrebbe svuotare il percorso di Python. Spero che questo ti aiuti.
Thayz

@ francisco-manuel-garca-botella Rispondere a vecchie domande è molto gradito su questo sito! Niente di cui scusarsi.
user7610

Non sono d'accordo sul fatto che questo sia pitonico e suggerirei che non sia un buon approccio di programmazione. La gestione delle eccezioni è molto costosa quando si verifica l'eccezione, quindi non si desidera utilizzarla per sostituire un'istruzione "if" in cui è del tutto possibile che si utilizzi il else. Un semplice se 'mypath' in sys.path ... else ... sarebbe il mio consiglio.
markgalassi

6

PYTHONPATH finisce in sys.path , che puoi modificare in fase di esecuzione.

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

C'è un motivo per preferire questa risposta a quella di @DavidZ?
Dror

Se non altro, è meno prolisso.
tripleee

-1

puoi impostare PYTHONPATH, da os.environ['PATHPYTHON']=/some/path, quindi devi chiamare os.system('python')per riavviare la shell python per rendere effettivo il percorso appena aggiunto.


1
os.system()non "riavvia la shell python", avvia una nuova istanza Python interattiva. Quando torni da quello, sei tornato nel copione chiamante.
tripleee

-2

Su Linux funziona anche questo:

import sys
sys.path.extend(["/path/to/dotpy/file/"])
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.