Wie setze ich im Python-Skript PYTHONPATH?

114

Ich weiß, wie ich es in meinem / etc / profile und in meinen Umgebungsvariablen festlegen kann.

Aber was ist, wenn ich es während eines Skripts einstellen möchte? Ist es Import OS, Sys? Wie mache ich es?

TIMEX
quelle

Antworten:

191

Sie setzen nicht PYTHONPATH, Sie fügen Einträge hinzu sys.path. Es ist eine Liste von Verzeichnissen, die nach Python-Paketen durchsucht werden sollten, sodass Sie Ihre Verzeichnisse einfach an diese Liste anhängen können.

sys.path.append('/path/to/whatever')

Tatsächlich wird sys.pathes durch Aufteilen des Werts des Pfadtrennzeichens initialisiert PYTHONPATH( :auf Linux-ähnlichen Systemen ;unter Windows).

Sie können Verzeichnisse auch mit hinzufügen site.addsitedir, und diese Methode berücksichtigt auch .pthDateien, die in den von Ihnen übergebenen Verzeichnissen vorhanden sind. (Dies wäre bei Verzeichnissen, in denen Sie angeben, nicht der Fall PYTHONPATH.)

David Z.
quelle
11
Es ist viele Jahre her, seit diese Antwort veröffentlicht wurde, aber ich möchte noch hinzufügen, dass Sie, wenn Sie sicherstellen möchten, dass Python beim Importieren das neue Verzeichnis vor allen anderen überprüft, das neue Verzeichnis als erstes in die Liste aufnehmen sollten in sys.path.insert(0, '/path/to/whatever').
Wecsam
38

Sie können Umgebungsvariablen abrufen und festlegen über os.environ:

import os
user_home = os.environ["HOME"]

os.environ["PYTHONPATH"] = "..."

Da Ihr Interpreter jedoch bereits ausgeführt wird, hat dies keine Auswirkungen. Du bist besser dran

import sys
sys.path.append("...")

Dies ist das Array, PYTHONPATHin das Sie beim Start des Interpreters umgewandelt werden.

miku
quelle
18

Wenn Sie sys.path.append('dir/to/path')ohne Prüfung setzen, ist es bereits hinzugefügt, können Sie eine lange Liste in generieren sys.path. Dafür empfehle ich Folgendes:

import sys
import os # if you want this directory

try:
    sys.path.index('/dir/path') # Or os.getcwd() for this directory
except ValueError:
    sys.path.append('/dir/path') # Or os.getcwd() for this directory
Francisco Manuel Garca Botella
quelle
2
Nett. Sehr pythonisch.
Teilbestellung
1
Wie kann ich den PythonPath leeren? Ich möchte nicht anhängen. Ich möchte es leeren und das, was ich will, nur hineinstecken. Gibt es eine Möglichkeit, dies zu tun?
Schütze
Haben Sie versucht, es neu zu initialisieren, indem Sie sys.path .__ init __ () aufrufen? Dies sollte den Python-Pfad leeren. Hoffe das hilft.
Thayz
@ francisco-manuel-garca-botella Die Beantwortung alter Fragen ist auf dieser Seite sehr willkommen! Nichts, wofür man sich entschuldigen müsste.
user7610
Ich bin nicht der Meinung, dass dies pythonisch ist, und ich würde vorschlagen, dass es kein guter Programmieransatz ist. Die Behandlung von Ausnahmen ist sehr teuer, wenn die Ausnahme auftritt. Sie möchten sie daher nicht verwenden, um eine "if" -Anweisung zu ersetzen, bei der es durchaus möglich ist, dass Sie die else-Anweisung verwenden. Ein einfaches if 'mypath' in sys.path ... else ... wäre mein Rat.
Markgalassi
6

PYTHONPATH landet in sys.path , das Sie zur Laufzeit ändern können.

import sys
sys.path += ["whatever"]
unbeli
quelle
Gibt es einen Grund, diese Antwort der von @DavidZ vorzuziehen?
Dror
Wenn nichts anderes, ist es weniger ausführlich.
Tripleee
-1

Sie können festlegen PYTHONPATH, bis os.environ['PATHPYTHON']=/some/path, dann müssen Sie aufrufen os.system('python'), um die Python-Shell neu zu starten, damit der neu hinzugefügte Pfad wirksam wird.

tesla1060
quelle
1
os.system()"startet die Python-Shell nicht neu", sondern startet eine neue interaktive Python-Instanz. Wenn Sie davon zurückkehren, befinden Sie sich wieder im aufrufenden Skript.
Tripleee
-2

Ich Linux das funktioniert auch:

import sys
sys.path.extend(["/path/to/dotpy/file/"])
Lashgar
quelle