aggiunta della directory a sys.path / PYTHONPATH


130

Sto cercando di importare un modulo da una directory specifica.

Il problema è che se uso sys.path.append(mod_directory)per aggiungere il percorso e quindi apro l'interprete Python, la directory mod_directoryviene aggiunta alla fine dell'elenco sys.path. Se esporto la PYTHONPATHvariabile prima di aprire l'interprete Python, la directory viene aggiunta all'inizio dell'elenco. In quest'ultimo caso posso importare il modulo ma nel primo non posso.

Qualcuno può spiegare perché questo sta accadendo e darmi una soluzione per aggiungere mod_directoryall'inizio, all'interno di uno script Python?


Ho provato il sitemodulo .
Zeinab Abbasimazar,

Risposte:


178

Funziona come documentato. Qualsiasi percorso specificato in PYTHONPATHviene documentato come proveniente normalmente dalla directory di lavoro ma prima dei percorsi forniti dall'interprete standard. sys.path.append()accoda al percorso esistente. Vedi qui e qui . Se vuoi che venga prima una directory specifica, inseriscila semplicemente in testa a sys.path:

import sys
sys.path.insert(0,'/path/to/mod_directory')

Detto questo, di solito ci sono modi migliori per gestire le importazioni rispetto all'uso PYTHONPATHo alla manipolazione sys.pathdiretta. Vedi, ad esempio, le risposte a questa domanda .


Grazie per la risposta. Il problema era che non mi rendevo conto che per aggiungere un modulo impacchettato come file .egg devi includere il nome del file anziché solo la directory in python 2.6
UnadulteratedImagination

2
Ehi amico, questo ha rotto il mio django. Sei sicuro di voler dire alla gente di metterlo in cima?!? !!?
R Claven,

16
@RClaven, scusa, è difficile dire a quale azione e risultati ti riferisci: "mettilo in alto" e "rotto il mio django" non sono molto precisi. Puoi elaborare?
Ned Deily,

Per maggiori informazioni su come funziona sys.path, vedere questa risposta stackoverflow.com/a/38403654/850326
djhaskin987

2
Dovresti davvero usare "1" invece di "0"! Altrimenti rompi sys.path . Vedi anche stackoverflow.com/q/10095037/125507 .
kadee,


6

Quanto a me, ho bisogno di caffe per il mio percorso di pitone. Posso aggiungere il suo percorso al file /home/xy/.bashrcaggiungendo

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH.

al mio /home/xy/.bashrcfile.

Ma quando uso Pycharm, il percorso non è ancora in.

Quindi posso aggiungere il percorso alla PYTHONPATHvariabile, eseguendo -> modifica configurazione.

inserisci qui la descrizione dell'immagine


La più semplice è la risposta migliore, aggiungere questo per lo sviluppo farà funzionare il completamento automatico
Gang

Ho aggiornato il .bashrc come spiegato sopra ma non ho riflettuto nel notebook jupyter. Il notebook Jupyter dice ancora che il modulo non è stato trovato.
Athar,

3

La modifica temporanea delle directory funziona bene per l'importazione:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

Quando si esegue uno script Python da Powershell in Windows, dovrebbe funzionare:

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

# Now run the actual script
python your_script.py
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.