site — Einhängepunkt für installationsspezifische Konfiguration¶
Quellcode: Lib/site.py
Dieses Modul wird während der Initialisierung selbsttätig importiert. Der selbsttätige Import lässt sich mit der Option -S des Interpreters unterdrücken.
Dieses Modul zu importieren hängt normalerweise installationsspezifische Pfade an den Suchpfad für Module an und fügt aufrufbare Objekte einschließlich help() dem integrierten Namensraum hinzu. Die Startoption -S von Python verhindert das. Das Modul lässt sich dann ohne selbsttätige Änderungen am Suchpfad und ohne Ergänzungen der integrierten Namen bedenkenlos importieren. Um die üblichen installationsspezifischen Ergänzungen ausdrücklich auszulösen, rufe die Funktion main() auf.
Geändert in Version 3.3: Früher löste der Import des Moduls die Pfadanpassung selbst mit -S aus.
Zunächst werden bis zu vier Verzeichnisse aus einem Kopf- und einem Endteil zusammengesetzt. Als Kopfteil dienen sys.prefix und sys.exec_prefix. Leere Köpfe werden übersprungen. Als Endteil dienen die leere Zeichenkette und dann lib/site-packages (unter Windows) beziehungsweise lib/pythonX.Y[t]/site-packages (unter Unix und macOS). Die optionale Endung „t“ steht für den Build mit freien Threads und wird angehängt, wenn "t" in der Konstante sys.abiflags vorkommt. Für jede der verschiedenen Kopf-Ende-Kombinationen wird geprüft, ob sie auf ein vorhandenes Verzeichnis verweist. Ist das der Fall, wird es sys.path hinzugefügt und der neu hinzugefügte Pfad zusätzlich auf Konfigurationsdateien untersucht.
Geändert in Version 3.5: Die Unterstützung für das Verzeichnis „site-python“ wurde entfernt.
Geändert in Version 3.13: Unter Unix sind Python-Installationen mit freien Threads an der Endung „t“ im versionsspezifischen Verzeichnisnamen zu erkennen, etwa lib/python3.13t/.
Geändert in Version 3.14: site ist nicht mehr dafür zuständig, sys.prefix und sys.exec_prefix bei Virtual Environments zu aktualisieren. Das geschieht nun während der Pfadinitialisierung. Damit hängen sys.prefix und sys.exec_prefix bei Virtual Environments nicht mehr von der Initialisierung von site ab und werden daher von -S nicht beeinflusst.
Läuft Python in einer virtuellen Umgebung, wird die Datei pyvenv.cfg in sys.prefix auf installationsspezifische Konfigurationen geprüft. Ist der Schlüssel include-system-site-packages vorhanden und auf true gesetzt (Groß- und Kleinschreibung spielt keine Rolle), werden die Präfixe der Systemebene nach site-packages durchsucht, andernfalls nicht. Werden die Präfixe der Systemebene nicht durchsucht, werden damit auch die Präfixe des Benutzers nicht nach site-packages durchsucht.
Das Modul site kennt zwei Konfigurationsdateien für den Start: name.pth für Pfadkonfigurationen und name.start für Code, der vor der ersten Zeile ausgeführt wird. Beide Dateien können in einem der vier oben genannten Verzeichnisse liegen. Innerhalb jedes Verzeichnisses werden diese Dateien alphabetisch nach Dateinamen sortiert und dann in dieser Reihenfolge eingelesen.
Pfaderweiterungen (.pth-Dateien)¶
name.pth enthält zusätzliche Einträge (einen je Zeile), die an sys.path angehängt werden. Einträge, die auf nicht vorhandene Verzeichnisse verweisen, werden nie zu sys.path hinzugefügt. Es wird nicht geprüft, ob ein Eintrag auf ein Verzeichnis und nicht auf eine Datei verweist. Kein Eintrag wird mehr als einmal zu sys.path hinzugefügt. Leerzeilen und Zeilen, die mit # beginnen, werden übersprungen.
Aus Gründen der Rückwärtskompatibilität werden Zeilen, die mit import beginnen (gefolgt von einem Leerzeichen oder Tabulator), mit exec() ausgeführt.
Geändert in Version 3.13: Die .pth-Dateien werden jetzt zuerst mit UTF-8 dekodiert und, falls das fehlschlägt, mit der Locale-Kodierung.
Geändert in Version 3.15: Zeilen in .pth-Dateien, die mit import beginnen, sind veraltet. Während der Übergangszeit werden solche Zeilen weiterhin ausgeführt (außer im unten genannten Fall), eine Diagnosemeldung erscheint aber nur, wenn das Flag -v angegeben ist.
import-Zeilen in name.pth werden stillschweigend übergangen, wenn eine passende Datei name.start vorhanden ist.
Fehler in einzelnen Zeilen brechen die Verarbeitung des restlichen Dateiinhalts nicht mehr ab. Jeder Fehler wird gemeldet und die übrigen Zeilen werden weiter verarbeitet.
Veraltet seit Version 3.15, wird in Version 3.20 entfernt: name.pth-Dateien in einer anderen Kodierung als utf-8-sig zu dekodieren ist in Python 3.15 veraltet. Die Unterstützung für das Dekodieren anhand der Locale-Kodierung wird in Python 3.20 entfernt.
import-Zeilen in name.pth-Dateien sind veraltet und werden in Python 3.18 und 3.19 stillschweigend übergangen. In Python 3.20 wird für import-Zeilen in name.pth-Dateien eine Warnung ausgegeben.
Einsprungpunkte beim Start (.start-Dateien)¶
Added in version 3.15.
Eine Datei mit Einsprungpunkten für den Start ist eine Datei, deren Name die Form name.start hat und die in einem der oben beschriebenen site-packages-Verzeichnisse liegt. Jede Datei gibt Einsprungpunkte an, die beim Start des Interpreters aufgerufen werden, in der Syntax pkg.mod:callable, die pkgutil.resolve_name() versteht.
Jede nicht leere Zeile, die nicht mit # beginnt, muss einen Verweis auf einen Einsprungpunkt in der Form pkg.mod:callable enthalten. Der Doppelpunkt und der aufrufbare Teil sind zwingend. Jedes aufrufbare Objekt wird ohne Argumente aufgerufen, ein etwaiger Rückgabewert wird verworfen.
.start-Dateien werden verarbeitet, nachdem alle Pfaderweiterungen aus .pth-Dateien auf sys.path angewendet wurden. So stehen die Pfade bereit, bevor Code beim Start läuft.
Anders als bei den sys.path-Erweiterungen aus .pth-Dateien werden mehrfach vorkommende Einsprungpunkte nicht zusammengefasst — erscheint ein Einsprungpunkt mehrfach, wird er mehrfach aufgerufen.
Tritt beim Auflösen oder Aufrufen eines Einsprungpunkts eine Ausnahme auf, wird ein Traceback nach sys.stderr ausgegeben und die Verarbeitung mit den übrigen Einsprungpunkten fortgesetzt.
.start-Dateien müssen in UTF-8 kodiert sein.
PEP 829 legte die ursprüngliche Spezifikation dieser Merkmale fest.
Bemerkung
Liegt eine Datei name.start neben einer Datei name.pth mit demselben Basisnamen, werden alle import-Zeilen in der .pth-Datei zugunsten der Einsprungpunkte in der .start-Datei übergangen.
Bemerkung
Ausführbare Zeilen (import-Zeilen in name.pth-Dateien und Einsprungpunkte in name.start-Dateien) werden beim Start von Python immer ausgeführt, unabhängig davon, ob ein bestimmtes Modul tatsächlich verwendet wird – es sei denn, -S schaltet das Modul site.py ganz ab.
Bemerkung
name.start-Dateien rufen pkgutil.resolve_name() mit strict=True auf, was die vollständige Form pkg.mod:callable voraussetzt.
Beispiele für Startdateien¶
Nehmen wir zum Beispiel an, sys.prefix und sys.exec_prefix seien auf /usr/local gesetzt. Die Python-X.Y-Bibliothek ist dann in /usr/local/lib/pythonX.Y installiert. Nehmen wir weiter an, dort gebe es ein Unterverzeichnis /usr/local/lib/pythonX.Y/site-packages mit drei Unterverzeichnissen foo, bar und spam sowie zwei Pfadkonfigurationsdateien foo.pth und bar.pth. foo.pth enthalte Folgendes:
# foo package configuration
foo
bar
bletch
und bar.pth enthalte:
# bar package configuration
bar
Dann werden die folgenden versionsspezifischen Verzeichnisse in dieser Reihenfolge zu sys.path hinzugefügt:
/usr/local/lib/pythonX.Y/site-packages/bar
/usr/local/lib/pythonX.Y/site-packages/foo
Beachte, dass bletch wegfällt, weil es nicht vorhanden ist; dass das Verzeichnis bar vor dem Verzeichnis foo steht, weil bar.pth alphabetisch vor foo.pth kommt; und dass spam wegfällt, weil es in keiner der beiden Pfadkonfigurationsdateien genannt wird.
Nehmen wir an, es gebe außerdem eine Datei foo.start mit folgendem Inhalt:
# foo package startup code
foo.submod:initialize
Nachdem sys.path wie oben erweitert wurde und bevor Python die Kontrolle an den Code des Benutzers übergibt, wird nun das Modul foo.submod importiert und die Funktion initialize() aus diesem Modul aufgerufen.
Von import-Zeilen in .pth-Dateien auf .start-Dateien umstellen¶
Liefert dein Paket derzeit eine Datei name.pth mit, kannst du alle Zeilen zur Erweiterung von sys.path unverändert lassen. Nur die import-Zeilen müssen umgestellt werden.
Erzeuge zum Umstellen ein aufrufbares Objekt ohne Argumente in einem importierbaren Modul deines Pakets. Verweise darauf als Einsprungpunkt pkg.mod:callable in einer passenden Datei name.start. Verschiebe alles, was in deiner import-Zeile nach dem ersten Semikolon steht, in die Funktion callable().
Muss dein Paket sowohl mit älteren Python-Versionen ohne PEP 829-Unterstützung als auch mit neueren mit ihr zurechtkommen, ändere die import-Zeilen in name.pth in folgende Form:
import pkg.mod; pkg.mod.callable()
Ältere Python-Versionen führen diese import-Zeilen aus, neuere übergehen sie zugunsten der Datei name.start. Entferne danach alle import-Zeilen aus deinen .pth-Dateien.
sitecustomize¶
Nach diesen Pfadanpassungen wird versucht, ein Modul namens sitecustomize zu importieren, das beliebige installationsspezifische Anpassungen vornehmen kann. Üblicherweise legt es ein Systemverwalter im site-packages-Verzeichnis an. Schlägt dieser Import mit einem ImportError oder einer Ausnahme einer Unterklasse davon fehl und ist das Attribut name der Ausnahme gleich 'sitecustomize', wird das stillschweigend übergangen. Wird Python ohne verfügbare Ausgabeströme gestartet, etwa über pythonw.exe unter Windows (das voreingestellt IDLE startet), werden Ausgabeversuche von sitecustomize übergangen. Jede andere Ausnahme führt zu einem stillen und möglicherweise schwer erklärlichen Scheitern des Prozesses.
usercustomize¶
Danach wird versucht, ein Modul namens usercustomize zu importieren, das beliebige benutzerspezifische Anpassungen vornehmen kann, sofern ENABLE_USER_SITE wahr ist. Diese Datei ist dafür gedacht, im site-packages-Verzeichnis des Benutzers angelegt zu werden (siehe unten), das Teil von sys.path ist, sofern es nicht mit -s abgeschaltet wurde. Schlägt dieser Import mit einem ImportError oder einer Ausnahme einer Unterklasse davon fehl und ist das Attribut name der Ausnahme gleich 'usercustomize', wird das stillschweigend übergangen.
Beachte, dass sys.prefix und sys.exec_prefix auf manchen Nicht-Unix-Systemen leer sind und die Pfadanpassungen dann übersprungen werden. Der Import von sitecustomize und usercustomize wird dennoch versucht.
Readline-Konfiguration¶
Auf Systemen, die readline unterstützen, importiert und konfiguriert dieses Modul auch das Modul rlcompleter, sofern Python im interaktiven Modus und ohne die Option -S gestartet wird. Voreingestellt werden die Vervollständigung per Tabulatortaste eingeschaltet und ~/.python_history als Datei für den Verlauf verwendet. Zum Abschalten lösche (oder überschreibe) das Attribut sys.__interactivehook__ in deinem Modul sitecustomize oder usercustomize oder in deiner Datei PYTHONSTARTUP.
Geändert in Version 3.4: rlcompleter und der Verlauf werden jetzt selbsttätig aktiviert.
Inhalt des Moduls¶
- site.PREFIXES¶
Eine Liste von Präfixen für site-packages-Verzeichnisse.
- site.ENABLE_USER_SITE¶
Flag, das den Zustand des site-packages-Verzeichnisses des Benutzers angibt.
Truebedeutet, dass es eingeschaltet und zusys.pathhinzugefügt wurde.Falsebedeutet, dass es auf Wunsch des Benutzers abgeschaltet wurde (mit-soderPYTHONNOUSERSITE).Nonebedeutet, dass es aus Sicherheitsgründen abgeschaltet wurde (Benutzer- oder Gruppenkennung stimmt nicht mit der effektiven Kennung überein) oder durch einen Systemverwalter.
- site.USER_SITE¶
Pfad zum site-packages-Verzeichnis des Benutzers für das laufende Python. Kann
Nonesein, wenngetusersitepackages()noch nicht aufgerufen wurde. Der voreingestellte Wert ist~/.local/lib/pythonX.Y[t]/site-packagesfür UNIX und macOS-Builds ohne Framework,~/Library/Python/X.Y/lib/python/site-packagesfür macOS-Framework-Builds und%APPDATA%\Python\PythonXY\site-packagesunter Windows. Das optionale „t“ steht für den Build mit freien Threads. Dieses Verzeichnis ist ein Site-Verzeichnis, das heißt, darin liegende.pth-Dateien werden verarbeitet.
- site.USER_BASE¶
Pfad zum Basisverzeichnis für die site-packages des Benutzers. Kann
Nonesein, wenngetuserbase()noch nicht aufgerufen wurde. Der voreingestellte Wert ist~/.localfür UNIX und macOS-Builds ohne Framework,~/Library/Python/X.Yfür macOS-Framework-Builds und%APPDATA%\Pythonunter Windows. Aus diesem Wert werden die Installationsverzeichnisse für Skripte, Datendateien, Python-Module und so weiter für das Installationsschema des Benutzers berechnet. Siehe auchPYTHONUSERBASE.
- site.main()¶
Fügt alle üblichen installationsspezifischen Verzeichnisse dem Suchpfad für Module hinzu. Diese Funktion wird selbsttätig aufgerufen, wenn dieses Modul importiert wird, es sei denn, der Python-Interpreter wurde mit dem Flag
-Sgestartet.Geändert in Version 3.3: Diese Funktion wurde früher bedingungslos aufgerufen.
- site.makepath(*paths)¶
Verbindet paths mit
os.path.join(), versucht das Ergebnis mitos.path.abspath()absolut zu machen und gibt ein Zweiertupel aus dem absoluten Pfad und seiner vonos.path.normcase()erzeugten Form mit angeglichener Groß- und Kleinschreibung zurück. Löstos.path.abspath()einenOSErroraus, wird der verbundene Pfad unverändert für das Angleichen der Schreibweise verwendet.Das zweite Element des zurückgegebenen Tupels ist die Form, die im gesamten Modul
sitezum Vergleichen von Pfaden auf Dateisystemen ohne Beachtung der Groß- und Kleinschreibung dient. Sie füllt die Mengenknown_paths, die in verschiedenen APIs dieses Moduls doppelte Einträge insys.pathverhindern.
- class site.StartupState(known_paths=None)¶
Instanzen dieser Klasse sammeln Konfigurationsdaten für den Start des Interpreters aus einem oder mehreren Site-Verzeichnissen. Sie sind die bevorzugte Schnittstelle, um die Verarbeitung von
.pth- und.start-Dateien über mehrere Site-Verzeichnisse hinweg zu bündeln, sodass jede Erweiterung vonsys.pathsichtbar ist, bevor Code beim Start läuft.Das optionale Argument known_paths ist eine Menge von Pfaden mit angeglichener Groß- und Kleinschreibung (wie sie
makepath()erzeugt), die doppelte Einträge insys.pathverhindert. BeiNone(der Voreinstellung) wird die Menge aus dem aktuellensys.pathgebildet.main()verwendet implizit eine Instanz dieser Klasse.Typische Verwendung:
state = site.StartupState() for sitedir in site_dirs: state.addsitedir(sitedir) state.process()
Added in version 3.15.
- addsitedir(sitedir)¶
Liest die
.pth- und.start-Dateien in sitedir und vermerkt deren Erweiterungen vonsys.path, die veraltetenimport-Zeilen aus.pthsowie die Einsprungpunkte aus.startin diesem Zustand. Die vermerkten Daten werden erst angewendet, wennprocess()aufgerufen wird.
- addusersitepackages()¶
Fügt das benutzereigene site-packages-Verzeichnis hinzu, sofern es eingeschaltet und vorhanden ist. Die Startdaten des Verzeichnisses werden für die spätere Verarbeitung durch
process()gesammelt.
- addsitepackages(prefixes=None)¶
Fügt globale site-packages-Verzeichnisse hinzu, berechnet aus prefixes oder, wenn prefixes
Noneist, aus dem globalenPREFIXES. Die Startdaten jedes Verzeichnisses werden für die spätere Verarbeitung durchprocess()gesammelt.
- process()¶
Wendet den gesammelten Zustand an: Zuerst kommen die Pfaderweiterungen zu
sys.pathhinzu, dann werden die Einsprungpunkte der.start-Dateien und dieimport-Zeilen der.pth-Dateien (veraltet) ausgeführt.Diese Methode ist nicht idempotent und darf an derselben Instanz nicht mehrfach aufgerufen werden. Sonst wird der gesammelte Zustand mehrfach angewendet und Einsprungpunkte und
import-Zeilen laufen erneut.
- site.addsitedir(sitedir, known_paths=None)¶
Fügt ein Verzeichnis zu sys.path hinzu und liest die
.pth- und.start-Dateien in diesem Verzeichnis ein. Üblicherweise insitecustomizeoderusercustomizeverwendet (siehe oben).Das Argument known_paths ist eine optionale Menge von Pfaden mit angeglichener Groß- und Kleinschreibung, die doppelte Einträge in
sys.pathverhindert. BeiNone(der Voreinstellung) wird die Menge aus dem aktuellensys.pathgebildet.Für die gebündelte Verarbeitung über mehrere Site-Verzeichnisse hinweg baue ausdrücklich einen
StartupStateauf und rufe daranStartupState.addsitedir()auf. Damit wird die Verarbeitung von.pthund.startauf einen einzigenStartupState.process()-Aufruf verschoben, sodass jede Erweiterung vonsys.pathsichtbar ist, bevor Code beim Start läuft.Geändert in Version 3.15: Verarbeitet auch
.start-Dateien. Siehe Einsprungpunkte beim Start (.start-Dateien).
- site.getsitepackages(prefixes=None)¶
Gibt eine Liste aller globalen site-packages-Verzeichnisse zurück.
Für jedes in prefixes angegebene Verzeichnis (oder
PREFIXES, wenn prefixesNoneist) berechnet diese Funktion abhängig von der Systemumgebung das zugehörige site-packages-Unterverzeichnis und gibt eine Liste vollständiger Pfade zurück, die nicht auf ihr Vorhandensein geprüft werden.Added in version 3.2.
Geändert in Version 3.3: Der optionale Parameter prefixes kam hinzu.
- site.getuserbase()¶
Gibt den Pfad des Basisverzeichnisses des Benutzers,
USER_BASE, zurück. Ist es noch nicht initialisiert, setzt diese Funktion es auch, unter Beachtung vonPYTHONUSERBASE.Added in version 3.2.
- site.getusersitepackages()¶
Gibt den Pfad des benutzerspezifischen site-packages-Verzeichnisses,
USER_SITE, zurück. Ist es noch nicht initialisiert, setzt diese Funktion es auch, unter Beachtung vonUSER_BASE. Um festzustellen, ob die benutzerspezifischen site-packages zusys.pathhinzugefügt wurden, istENABLE_USER_SITEzu verwenden.Added in version 3.2.
Befehlszeilenschnittstelle¶
Das Modul site bietet auch eine Möglichkeit, die Verzeichnisse des Benutzers über die Befehlszeile zu erfahren:
$ python -m site --user-site
/home/user/.local/lib/python3.11/site-packages
Ohne Argumente aufgerufen, gibt es den Inhalt von sys.path auf der Standardausgabe aus, gefolgt vom Wert von USER_BASE und der Angabe, ob das Verzeichnis vorhanden ist, dann dasselbe für USER_SITE und schließlich den Wert von ENABLE_USER_SITE.
- --user-base¶
Gibt den Pfad zum Basisverzeichnis des Benutzers aus.
- --user-site¶
Gibt den Pfad zum site-packages-Verzeichnis des Benutzers aus.
Sind beide Optionen angegeben, werden Basisverzeichnis und site-packages-Verzeichnis des Benutzers ausgegeben (immer in dieser Reihenfolge), getrennt durch os.pathsep.
Ist eine Option angegeben, endet das Skript mit einem dieser Werte: 0, wenn das site-packages-Verzeichnis des Benutzers eingeschaltet ist, 1, wenn es vom Benutzer abgeschaltet wurde, 2, wenn es aus Sicherheitsgründen oder durch einen Systemverwalter abgeschaltet ist, und einen Wert größer als 2 bei einem Fehler.
Siehe auch
PEP 370 – Benutzereigenes site-packages-Verzeichnis
PEP 829 – Einsprungpunkte beim Start und das Veralten von import-Zeilen in
.pth-DateienThe initialization of the sys.path module search path – Die Initialisierung von
sys.path.