2011-01-02 6 views
57

ich laufen soll:Python - fügen Sie PYTHONPATH während der Kommandozeilen-Modul laufen

python somescript.py somecommand 

Aber, wenn ich dies ausführen ich brauche PYTHONPATH ein bestimmtes Verzeichnis aufzunehmen. Ich kann es nicht einfach zu meinen Umgebungsvariablen hinzufügen, da das Verzeichnis, das ich hinzufügen möchte, sich auf das Projekt bezieht, das ich ausführe. Gibt es eine Möglichkeit, PYTHONPATH während der Ausführung eines Skripts zu ändern? Hinweis: Ich habe nicht einmal eine PYTHONPATH Variable, so dass ich mir keine Sorgen darüber machen muss, dass ich mich an sie anschließe, anstatt sie während der Ausführung dieses Skripts außer Kraft zu setzen.

Antwort

91

Für Mac/Linux;

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

Für Windows, installieren Sie einen Wrapper pythonpath.bat;

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

und rufen Sie pythonpath.bat Skriptdatei wie;

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

@ İsmail - danke. Wie kann ich das tun, während ich ein Skript über meine Eingabeaufforderung ausführe? Ich führe Python nicht aus, importiere Zeug und führe es manuell aus. – orokusaki

+0

Auf Mac/Linux würden Sie tun 'PYTHONPATH =/foo/bar python somescript.py einige command' – ismail

+0

Ich versuchte' python -c "importieren sys; sys.path.append ('/ my/dir')" 'und dann' python myscript.py mycommand', teilt aber offensichtlich nicht den Pfad von der ersten Interpreter-Sitzung mit der nächsten. Ah, habe gerade deinen nächsten Kommentar gesehen, versuche es jetzt ... Hat an WinXP nicht funktioniert. – orokusaki

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

Grundsätzlich sys.path ist eine Liste mit allen Suchpfade für Python-Module. Es wird vom Interpreter initialisiert. Der Inhalt von PYTHONPATH wird automatisch am Ende dieser Liste hinzugefügt.

+8

oder sys.path.insert (0, '/ some/directory'), um es an den Anfang des Pfades zu setzen. Dadurch kann Ihr Material andere Objekte überschreiben, die sich möglicherweise bereits in Pythonpath befinden. – sienkiew

+0

Ich habe diese Antwort außerhalb der pydev-eclipse IDE unintest ausgeführt. – LAL

+0

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

6

Wenn Sie den Befehl von einem POSIX-kompatiblen Shell ausgeführt werden, wie bash, die Umgebungsvariable wie folgt festlegen:

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

Wenn es in einer Zeile ist, gilt der PYTHONPATH Umgebungswert nur zu dieser eine Befehl.

$ 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

Genau das, was ich gesucht habe, vielen Dank. Aus irgendeinem Grund läuft 'python -c 'import sys; sys.path.insert (0,' mein/pfad '); import meinmodul'' hat nicht funktioniert. –

-1

Dies ist für Fenster:

Zum Beispiel habe ich einen Ordner "mygrapher" auf meinem Desktop genannt. Im Inneren befinden sich Ordner namens "calculation" und "graphing", die Python-Dateien enthalten, die meine Hauptdatei "grapherMain.py" benötigt. Außerdem wird "grapherMain.py" in "graphing" gespeichert. Um alles ohne Verschieben von Dateien auszuführen, kann ich ein Stapelscript erstellen. Lassen Sie uns diese Batch-Datei "rungraph.bat" nennen.

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

Dieses Skript befindet sich in "mygrapher". So führen Sie Dinge, würde ich in meine Eingabeaufforderung erhalten, dann tun:

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

und wie unterscheidet sich das von @Ismail 'cartman' Dönmez Antwort? –

0

Sie können diese versuchen, eine Funktion in Ihrem Skript auszuführen

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