2011-01-02 24 views
57

voglio correre:Python - aggiungere PYTHONPATH durante modulo di riga di comando Esegui

python somescript.py somecommand 

Ma, quando ho eseguito questo ho bisogno PYTHONPATH di includere una determinata directory. Non posso semplicemente aggiungerlo alle variabili di ambiente perché la directory che voglio aggiungere cambia in base al progetto che sto eseguendo. C'è un modo per modificare PYTHONPATH durante l'esecuzione di uno script? Nota: non ho nemmeno una variabile PYTHONPATH, quindi non ho bisogno di preoccuparmi di accodarla o di sovrascriverla durante l'esecuzione di questo script.

risposta

91

Per Mac/Linux;

PYTHONPATH=/foo/bar/baz python somescript.py somecommand 

Per Windows, impostare un wrapper pythonpath.bat;

@ECHO OFF 
setlocal 
set PYTHONPATH=%1 
python %2 %3 
endlocal 

e chiamare il file di script pythonpath.bat come;

pythonpath.bat /foo/bar/baz somescript.py somecommand 
+0

@ İsmail - grazie. Tuttavia, come posso farlo mentre eseguo uno script dal mio prompt dei comandi? Non sto eseguendo Python, importando materiale e eseguendolo manualmente. – orokusaki

+0

Su Mac/Linux si farebbe 'PYTHONPATH =/foo/bar python somescript.py somecommand' – ismail

+0

Ho provato' python -c "import sys; sys.path.append ('/ my/dir')" 'e poi' python myscript.py mycommand', ma ovviamente non condivide il percorso dalla prima sessione di interprete alla successiva. Ah, ho appena visto il tuo prossimo commento, provando ora ... Non ha funzionato su WinXP. – orokusaki

38
import sys 
sys.path.append('your certain directory') 

Fondamentalmente sys.path è una lista con tutti i percorsi di ricerca per i moduli Python. È inizializzato dall'interprete. Il contenuto di PYTHONPATH viene automaticamente aggiunto alla fine di tale elenco.

+8

o sys.path.insert (0, '/ some/directory') per metterlo in testa al tuo percorso. Ciò consente al materiale di ignorare altre cose che potrebbero già essere in pythonpath. – sienkiew

+0

Ho usato questa risposta per eseguire unintest fuori IDE pydev-eclipse. – LAL

+0

'sys.path.append (r'D: \ PyCharmProjects \ cheese_shoppe ')' esempio in Windows. –

6

Se si esegue il comando da una shell POSIX-compliant, come bash, è possibile impostare la variabile di ambiente come questo:

PYTHONPATH="/path/to" python somescript.py somecommand 

Se è tutto su una riga, il valore di ambiente PYTHONPATH si applica solo alle quell'unico comando.

$ echo $PYTHONPATH 

$ python -c 'import sys;print("/tmp/pydir" in sys.path)' 
False 
$ PYTHONPATH=/tmp/pydir python -c 'import sys;print("/tmp/pydir" in sys.path)' 
True 
$ echo $PYTHONPATH 
+0

Proprio quello che stavo cercando, grazie mille. Per qualche motivo, eseguendo "python -c" import sys; sys.path.insert (0, 'my/path'); import mymodule "' non ha funzionato. –

-1

Questo è per Windows:

Per esempio, ho una cartella denominata "mygrapher" sul mio desktop. All'interno, ci sono cartelle chiamate "calcolo" e "grafica" che contengono i file Python necessari al mio file principale "grapherMain.py". Inoltre, "grapherMain.py" è memorizzato in "graphing". Per eseguire tutto senza spostare i file, posso creare uno script batch. Chiamiamo questo file batch "rungraph.bat".

@ECHO OFF 
setlocal 
set PYTHONPATH=%cd%\grapher;%cd%\calculation 
python %cd%\grapher\grapherMain.py 
endlocal 

Questo script si trova in "mygrapher". Per eseguire cose, vorrei entrare nel mio prompt dei comandi, poi fare:

>cd Desktop\mygrapher (this navigates into the "mygrapher" folder) 
>rungraph.bat (this executes the batch file) 
+3

e in che modo è diverso da @ İsmail "cartman" Dönmez? –

0

si può provare questo per eseguire una funzione all'interno dello script

python -c "import sys; sys.path.append('/your/script/path'); import yourscript; yourscript.yourfunction()" 
Problemi correlati