Ich gehe durch und schreibe ein Setup-Dokument für andere Entwickler bei der Arbeit für ein Python-Projekt und habe die PYTHONPATH
Umgebungsvariable nachgelesen. Ich schaue auf mein aktuelles Entwicklungssystem und denke, dass einige Dinge falsch eingestellt sind, die dazu führen, dass sich meine IDE (IntelliJ) beim Nachschlagen der Python-Bibliotheken falsch verhält.
Ich habe mir hier und hier die Dokumentation angesehen und bin mir immer noch nicht sicher, was eigentlich in der PYTHONPATH
Umgebungsvariablen enthalten sein soll.
Ich habe PYTHONHOME
auf `C: \ Python27 'hingewiesen.
Mein Strom PYTHONPATH
ist auf eingestellt PYTHONHOME
. Soll ich auch die Verzeichnisse aus hinzufügen sys.path
?
AKTUALISIEREN:
Basierend auf den folgenden Informationen PYTHONPATH
muss nicht festgelegt werden, es sei denn, es gibt nicht standardmäßige Bibliotheken, die Python standardmäßig finden soll. Wenn ich zum Beispiel wxPython vom Installationsprogramm aus installiere, werden seine Bibliotheken hinzugefügt PYTHONPATH
. Ich setze PYTHONHOME
das Stammverzeichnis der Python-Installation, damit ich es meiner Systemumgebungsvariablen hinzufügen kann, PATH
damit ich Python von jedem Ort aus ausführen kann.
Bei den meisten Installationen sollten Sie diese Variablen nicht festlegen, da sie für die Ausführung von Python nicht benötigt werden. Python weiß, wo sich die Standardbibliothek befindet.
Der einzige Grund, PYTHONPATH festzulegen, besteht darin, Verzeichnisse von benutzerdefinierten Python-Bibliotheken zu verwalten, die Sie nicht am globalen Standardspeicherort installieren möchten (z
site-packages
Verzeichnis) .Stellen Sie sicher, dass Sie Folgendes lesen: http://docs.python.org/using/cmdline.html#environment-variables
quelle
Folgendes habe ich gelernt: PYTHONPATH ist ein Verzeichnis, das dem Python-Importsuchpfad "sys.path" hinzugefügt werden kann, der aus dem aktuellen Verzeichnis besteht. CWD, PYTHONPATH, Standard- und Shared Library sowie Kundenbibliothek. Zum Beispiel:
% python3 -c "import sys;print(sys.path)" ['', '/home/username/Documents/DjangoTutorial/mySite', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
wobei der erste Pfad '' die aktuelle Richtung bezeichnet, ist der zweite Pfad via
Diese können zu ~ / .bashrc hinzugefügt werden, um sie dauerhaft zu machen. Der Rest sind Python-Standard- und dynamische gemeinsam genutzte Bibliotheken sowie Bibliotheken von Drittanbietern wie Django.
Wie gesagt, um sich nicht mit PYTHONHOME anzulegen, führt die Einstellung auf '' oder 'Keine' dazu, dass die Python3-Shell nicht mehr funktioniert:
% export PYTHONHOME='' % python3 Fatal Python error: Py_Initialize: Unable to get the locale encoding ModuleNotFoundError: No module named 'encodings' Current thread 0x00007f18a44ff740 (most recent call first): Aborted (core dumped)
Beachten Sie, dass beim Starten eines Python-Skripts das CWD das Verzeichnis des Skripts ist. Zum Beispiel:
username@bud:~/Documents/DjangoTutorial% python3 mySite/manage.py runserver ==== Printing sys.path ==== /home/username/Documents/DjangoTutorial/mySite # CWD is where manage.py resides /usr/lib/python3.6 /usr/lib/python3.6/lib-dynload /usr/local/lib/python3.6/dist-packages /usr/lib/python3/dist-packages
Sie können zur Laufzeit auch einen Pfad an sys.path anhängen: Angenommen, Sie haben eine Datei Fibonacci.py im Verzeichnis ~ / Documents / Python:
username@bud:~/Documents/DjangoTutorial% python3 >>> sys.path.append("/home/username/Documents") >>> print(sys.path) ['', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/home/username/Documents'] >>> from Python import Fibonacci as fibo
oder über
% PYTHONPATH=/home/username/Documents:$PYTHONPATH % python3 >>> print(sys.path) ['', '/home/username/Documents', '/home/username/Documents/DjangoTutorial/mySite', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages'] >>> from Python import Fibonacci as fibo
quelle