2013-04-19 12 views
68

Sto tentando di importare un modulo da una directory specifica.aggiunta directory a sys.path/PYTHONPATH

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

Qualcuno può spiegare perché questo sta accadendo e dammi una soluzione per aggiungere mod_directory all'inizio, all'interno di uno script python?

+0

Ho provato [modulo 'site'] (https://docs.python.org/3/library/site.html#site.addsitedir). –

risposta

95

Questo funziona come documentato. Tutti i percorsi specificati in PYTHONPATH vengono documentati come normalmente in arrivo dopo la directory di lavoro ma prima dei percorsi standard forniti dall'interprete. sys.path.append() si aggiunge al percorso esistente. Vedi here e here. Se si desidera una particolare directory di venire prima, è sufficiente inserirlo a capo di sys.path:

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

Detto questo, ci sono modi migliori per gestire solito importazioni rispetto sia utilizzando PYTHONPATH o manipolare sys.path direttamente. Vedi, ad esempio, le risposte a this question.

+0

grazie per la risposta. Il problema era che non mi ero reso conto che per aggiungere il modulo impacchettato come file .egg devi includere il nome del file invece della sola directory in python 2.6 – UnadulteratedImagination

+1

Ehi amico, questo ha rotto il mio django. Sei sicuro di voler dire alle persone di metterlo in cima?!? !!? –

+12

@RClaven, mi spiace, è difficile dire quale azione e risultati ti riferisci a: "metterlo in cima" e "rompere il mio django" non sono molto precisi. Puoi elaborare? –

1

Si potrebbe utilizzare:

import os 
path = 'the path you want' 
os.environ['PATH'] += ':'+path 
1

dirs Modifica temporanea 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 ambiente Windows, questo dovrebbe funzionare:

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

# Now run the actual script 
python your_script.py 
Problemi correlati