Python versucht, wirklich intelligent sys.path
gesetzt schwer. Wie es ist Set kann reallycomplicated bekommen. Der folgende Leitfaden ist ein verwässertes, etwas unvollständiges, etwas falsches, aber hoffentlich nützliches Handbuch für den einfachen Python-Programmierer von dem, was passiert, wenn Python herausfindet, was man als Anfangswerte verwenden soll von sys.path
, sys.executable
, sys.exec_prefix
und sys.prefix
auf einem normalen Python-Installation.
Zuerst macht Python seine Ebene am besten, um herauszufinden, seine tatsächliche physische Speicherort auf dem Dateisystem basierend auf was das Betriebssystem sagt es. Wenn das Betriebssystem nur sagt "Python" läuft, findet es sich in $ PATH. Es löst alle symbolischen Links auf. Sobald dies geschehen ist, wird der Pfad der ausführbare Datei, die er findet, als Wert für sys.executable
, no ifs, ands oder buts verwendet. Als nächstes werden die Anfangswerte für sys.exec_prefix
und sys.prefix
bestimmt.
Wenn es eine Datei namens pyvenv.cfg
im selben Verzeichnis wie sys.executable
oder ein Verzeichnis nach oben gibt, schaut Python darauf. Verschiedene Betriebssysteme machen verschiedene Dinge mit dieser Datei.
Einer der Werte in dieser Konfigurationsdatei, nach der Python sucht, ist die Konfigurationsoption home = <DIRECTORY>
. Python verwendet dieses Verzeichnis anstelle des Verzeichnisses, das sys.executable
enthält, wenn es den Anfangswert von sys.prefix
später dynamisch festlegt. Wenn die applocal = true
Einstellung in der pyvenv.cfg
Datei unter Windows angezeigt wird, aber nicht die home = <DIRECTORY>
Einstellung, , dann wird sys.prefix
auf das Verzeichnis festgelegt, das sys.executable
enthält.
Als nächstes wird die Umgebungsvariable PYTHONHOME
untersucht. Unter Linux und Mac, sys.prefix
und sys.exec_prefix
werden das PYTHONHOME
Umgebungsvariable gesetzt, wenn es existiert, jede home = <DIRECTORY>
Einstellung in pyvenv.cfg
ablöst.Unter Windows sys.prefix
und sys.exec_prefix
zum PYTHONHOME
Umgebungsvariable gesetzt ist, wenn es vorhanden ist, ist es sei denn, eine home = <DIRECTORY>
Einstellung in pyvenv.cfg
, die stattdessen verwendet wird.
Ansonsten diese sys.prefix
und sys.exec_prefix
werden durch Rückwärtsgehen vom Ort des sys.executable
oder das home
Verzeichnis gegeben durch pyvenv.cfg
wenn überhaupt vorhanden.
Wenn die Datei lib/python<version>/dyn-load
in diesem Verzeichnis oder eines seiner übergeordneten Verzeichnissen gefunden wird, wird das Verzeichnis sein sys.exec_prefix
unter Linux oder Mac zu setzen. Wenn die Datei lib/python<version>/os.py
im Verzeichnis oder einen seiner Verzeichnisse gefunden wird, wird das Verzeichnis festgelegt sys.prefix
auf Linux sein, Mac und Windows, mit sys.exec_prefix
auf den gleichen Wert wie sys.prefix
unter Windows. Dieser gesamte Schritt wird unter Windows übersprungen, wenn applocal = true
eingestellt ist. Entweder das Verzeichnis sys.executable
wird verwendet oder, wenn home
in pyvenv.cfg
eingestellt ist, wird anstelle von der Anfangswert sys.prefix
verwendet.
Wenn es nicht diese „Wahrzeichen“ Dateien finden oder sys.prefix
nicht noch nicht gefunden, dann Python-Sets sys.prefix
auf einen „Rückfall“ Wert. Linux und Mac zum Beispiel verwenden vorkompilierte Standardwerte wie die Werte von sys.prefix
und sys.exec_prefix
. Windows wartet , bis sys.path
vollständig berechnet ist, um einen Fallback-Wert für sys.prefix
festzulegen.
Dann, (worauf Sie alle gewartet haben), bestimmt Python die Anfangswerte , die in sys.path
enthalten sein sollen.
- Das Verzeichnis des Skripts, das Python ausführt, wird
sys.path
hinzugefügt. Unter Windows ist dies immer die leere Zeichenfolge, die python an anweist, stattdessen das aktuelle Arbeitsverzeichnis zu verwenden.
- Der Inhalt der Umgebungsvariablen PYTHONPATH, wenn gesetzt, wird
sys.path
hinzugefügt, es sei denn, Sie auf Windows sind und applocal
in pyvenv.cfg
auf true gesetzt.
- Der ZIP-Dateipfad, der
<prefix>/lib/python35.zip
unter Linux/Mac und os.path.join(os.dirname(sys.executable), "python.zip")
unter Windows ist, wird zu sys.path
hinzugefügt.
- Wenn unter Windows
applocal = true
in pyvenv.cfg
festgelegt wurde, werden die Inhalte der Unterschlüssel des Registrierungsschlüssels HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
hinzugefügt, sofern vorhanden.
- Wenn auf Windows und kein
applocal = true
wurde in pyvenv.cfg
, Satz und sys.prefix
nicht gefunden werden konnte, dann die Kerninhalte der des Registrierungsschlüssels HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
hinzugefügt wird, wenn es vorhanden ist;
- Wenn auf Windows und keine
applocal = true
wurden in pyvenv.cfg
, dann wird der Inhalt des Unterschlüssels des Registrierungsschlüssels HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\
hinzugefügt werden, wenn ich keine weiterführende Haftung.
- Wenn auf Windows und kein
applocal = true
wurde in pyvenv.cfg
, Satz und sys.prefix
nicht gefunden werden konnte, dann die Kerninhalte der des Registrierungsschlüssels HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
hinzugefügt wird, wenn es vorhanden ist;
- Wenn unter Windows und PYTHONPATH nicht festgelegt wurde, das Präfix nicht gefunden wurde und keine Registrierungsschlüssel vorhanden waren, wird der relative Kompilierzeitwert von PYTHONPATH hinzugefügt; Andernfalls wird dieser Schritt ignoriert.
- Pfade im Kompilierzeitmakro PYTHONPATH werden relativ zum dynamisch gefundenen
sys.prefix
hinzugefügt. Auf Mac und Linux wird der Wert sys.exec_prefix
hinzugefügt. Unter Windows wurde das Verzeichnis , das für die dynamische Suche nach sys.prefix
verwendet wurde (oder verwendet wurde), hinzugefügt.
unter Windows In diesem Stadium, wenn kein Präfix gefunden wurde, dann wird Python bestimmen sie versuchen, durch alle die Verzeichnisse in sys.path
für die Grenzstein-Dateien suchen, , wie es mit dem Verzeichnis zu tun versuchte, sys.executable
vorher, bis es etwas findet. Wenn nicht, wird sys.prefix
leer gelassen.
Endlich, nach all dem, lädt Python das site
-Modul, das Material noch weiter zu sys.path
ergänzt:
Es beginnt mit vier Verzeichnisse aus einem Kopf und einem Schwanz Teil der Konstruktion auf. Für den Kopfteil verwendet es sys.prefix und sys.exec_prefix; leere Köpfe werden übersprungen. Für den Endteil verwendet es die leere Zeichenkette und dann lib/site-packages (unter Windows) oder lib/pythonX.Y/site-packages und dann lib/site-python (unter Unix und Macintosh). Für jede der verschiedenen Head-Tail-Kombinationen sieht es, ob es sich auf ein existierendes -Verzeichnis bezieht, und falls dies der Fall ist, fügt es sys.path hinzu und inspiziert auch den neuen hinzugefügten Pfad für Konfigurationsdateien.
Ich denke, sie von der Website-Modul kommen: http://docs.python.org/library/site.html – ashcatch
Die Website Modul lädt und analysiert die Inhalte der .pth Dateien in Ihrer Website-Pakete Verzeichnis. Diese .pth Dateien enthalten Ergänzungen zu Ihrem PYTHONPATH – ASk