Python - Fügen Sie PYTHONPATH während der Ausführung des Befehlszeilenmoduls hinzu

85

Ich möchte rennen:

python somescript.py somecommand

Aber wenn ich das ausführe, muss ich PYTHONPATHein bestimmtes Verzeichnis einschließen. Ich kann es nicht einfach zu meinen Umgebungsvariablen hinzufügen, da sich das Verzeichnis, das ich hinzufügen möchte, basierend auf dem von mir ausgeführten Projekt ändert. Gibt es eine Möglichkeit, Änderungen PYTHONPATHbeim Ausführen eines Skripts vorzunehmen? Hinweis: Ich habe nicht einmal eine PYTHONPATHVariable, daher muss ich mich nicht darum kümmern, sie anzuhängen oder sie während der Ausführung dieses Skripts zu überschreiben.

Orokusaki
quelle

Antworten:

147

Für Mac / Linux;

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

Richten Sie unter Windows einen Wrapper ein pythonpath.bat.

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

und Aufruf einer pythonpath.batSkriptdatei wie;

pythonpath.bat /foo/bar/baz somescript.py somecommand
ismail
quelle
@ İsmail - danke. Wie kann ich das tun, während ich ein Skript an meiner Eingabeaufforderung ausführe? Ich führe Python nicht aus, importiere Sachen und führe sie manuell aus.
Orokusaki
Unter Mac / Linux würden Sie tunPYTHONPATH=/foo/bar python somescript.py somecommand
ismail
Ich habe es versucht python -c"import sys;sys.path.append('/my/dir')"und dann python myscript.py mycommand, aber es teilt offensichtlich nicht den Pfad von der ersten Dolmetschersitzung mit der nächsten. Ah, habe gerade Ihren nächsten Kommentar gesehen und es jetzt versucht ... Hat unter WinXP nicht funktioniert.
Orokusaki
1
Unter unsetWindows gibt es keinen Befehl für Umgebungsvariablen. Fügen Sie stattdessen ein setlocalnach dem Anfangsbuchstaben hinzu, echo offund dann tritt ein implizites endlocalZeichen auf, wenn das .bat-Skript endet (und PYTHONPATHauf den vorherigen Wert zurückgesetzt wird).
Martineau
5
Wenn Sie unter Windows einen Pfad an den vorhandenen anhängenPYTHONPATH möchten, möchten Sie diesen möglicherweise verwenden set PYTHONPATH=%PYTHONPATH%;%1.
Martineau
48
 import sys
 sys.path.append('your certain directory')

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

Piotr Czapla
quelle
10
oder sys.path.insert (0, '/ some / directory'), um es an die Spitze Ihres Pfades zu setzen. Auf diese Weise kann Ihr Material andere Inhalte überschreiben, die sich möglicherweise bereits auf Pythonpath befinden.
Sienkiew
Ich habe diese Antwort verwendet, um einen Unintest außerhalb der Pydev-Eclipse-IDE auszuführen.
LAL
sys.path.append(r'D:\PyCharmProjects\cheese_shoppe')Beispiel in Windows.
Bob Stein
9

Wenn Sie den Befehl beispielsweise über eine POSIX-kompatible Shell ausführen bash, können Sie die Umgebungsvariable wie folgt festlegen:

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

Wenn alles in einer Zeile steht, gilt der Umgebungswert PYTHONPATH nur für diesen einen 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
Ned Deily
quelle
Genau das, wonach ich gesucht habe, vielen Dank. Aus irgendeinem Grund python -c "import sys; sys.path.insert(0,'my/path'); import mymodule"funktionierte das Laufen nicht.
Luke Davis
0

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

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

Dies ist für Windows:

Zum Beispiel habe ich einen Ordner mit dem Namen "mygrapher" auf meinem Desktop. Im Inneren befinden sich Ordner mit den Namen "Berechnung" und "Grafik", die Python-Dateien enthalten, die meine Hauptdatei "grapherMain.py" benötigt. Außerdem wird "grapherMain.py" in "graphing" gespeichert. Um alles auszuführen, ohne Dateien zu verschieben, kann ich ein Batch-Skript erstellen. Nennen wir diese Batch-Datei "rungraph.bat".

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

Dieses Skript befindet sich in "mygrapher". Um Dinge auszuführen, würde ich in meine Eingabeaufforderung gelangen und dann Folgendes tun:

>cd Desktop\mygrapher (this navigates into the "mygrapher" folder)
>rungraph.bat (this executes the batch file)
Jack
quelle
5
und wie unterscheidet sich das von @ İsmail 'cartman' Dönmez Antwort?
Alex Okrushko