Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

PEP 370 – Benutzerbezogenes site-packages-Verzeichnis

Autor:
Christian Heimes <christian at python.org>
Status:
Final
Typ:
Standards Track
Erstellt:
11. Januar 2008
Python-Version:
2.6, 3.0
Post-History:


Inhaltsverzeichnis

Zusammenfassung

Dieses PEP schlägt ein neues, benutzerbezogenes site-packages-Verzeichnis vor, um Benutzern die lokale Installation von Python-Paketen in ihrem Home-Verzeichnis zu ermöglichen.

Begründung

Aktuelle Python-Versionen haben keine einheitliche Methode, um Pakete im Home-Verzeichnis eines Benutzers zu installieren (außer bei Mac-Framework-Builds). Benutzer sind entweder gezwungen, den Systemadministrator um die Installation oder Aktualisierung eines Pakets zu bitten, oder sie müssen auf eine der vielen Workarounds wie Virtual Python [1], Working Env [2] oder Virtual Env [3] zurückgreifen.

Ziel dieses PEP ist es nicht, die Werkzeuge zu ersetzen oder isolierte Installationen von Python zu implementieren. Es implementiert nur den gängigsten Anwendungsfall eines zusätzlichen site-packages-Verzeichnisses für jeden Benutzer.

Das Feature kann nicht mit der Umgebungsvariablen PYTHONPATH implementiert werden. Die Umgebungsvariable fügt lediglich ein neues Verzeichnis am Anfang von sys.path ein, aber sie parst nicht die pth-Dateien im Verzeichnis. Ein vollständiger site-packages-Pfad ist für verschiedene Anwendungen und Python-Eier erforderlich.

Spezifikation

site-Verzeichnis (site-packages)

Ein Verzeichnis in sys.path. Im Gegensatz zu gewöhnlichen Verzeichnissen werden auch die pth-Dateien im Verzeichnis verarbeitet.

Benutzer-site-Verzeichnis

Ein site-Verzeichnis innerhalb des Home-Verzeichnisses des Benutzers. Ein Benutzer-site-Verzeichnis ist spezifisch für eine Python-Version. Der Pfad enthält die Versionsnummer (nur Haupt- und Nebenversion).
Unix (einschließlich Mac OS X)
~/.local/lib/python2.6/site-packages
Windows
%APPDATA%/Python/Python26/site-packages

Benutzerdatenverzeichnis

Normalerweise das übergeordnete Verzeichnis des Benutzer-site-Verzeichnisses. Es ist für Python-versionsspezifische Daten wie Konfigurationsdateien, Dokumente, Bilder und Übersetzungen bestimmt.
Unix (einschließlich Mac)
~/.local/lib/python2.6
Windows
%APPDATA%/Python/Python26

Benutzer-Basisverzeichnis

Es befindet sich im Home-Verzeichnis des Benutzers. Das Benutzer-site- und das Benutzerkonfigurationsverzeichnis befinden sich innerhalb des Basisverzeichnisses. Auf einigen Systemen kann das Verzeichnis mit Drittanbieteranwendungen geteilt werden.
Unix (einschließlich Mac)
~/.local
Windows
%APPDATA%/Python

Benutzer-Skriptverzeichnis

Ein Verzeichnis für Binärdateien und Skripte. [10] Es ist über Python-Versionen hinweg gemeinsam nutzbar und das Zielverzeichnis für Skripte.
Unix (einschließlich Mac)
~/.local/bin
Windows
%APPDATA%/Python/Scripts

Windows-Hinweise

Unter Windows wurde das Application Data-Verzeichnis (auch APPDATA genannt) gewählt, da es der am besten geeignete Ort für Anwendungsdaten ist. Microsoft empfiehlt, dass Software nicht in USERPROFILE [5] schreibt und Meine Dokumente ebenfalls nicht für Anwendungsdaten geeignet ist. [8] Der Code fragt nicht die Win32-API ab, sondern verwendet die Umgebungsvariable %APPDATA%.

Das Anwendungsdatenverzeichnis ist Teil des Roaming-Profils. In Netzwerken mit Domain-Logins können die Anwendungsdaten von und zu einem zentralen Server kopiert werden. Dies kann das An- und Abmelden verlangsamen. Benutzer können die Daten auf dem Server behalten, indem sie z.B. PYTHONUSERBASE auf den Wert "%HOMEDRIVE%%HOMEPATH%Application Data" setzen. Benutzer sollten ihren lokalen Administrator für weitere Informationen konsultieren. [13]

Unix-Hinweise

Unter Unix wurde ~/.local gegenüber ~/.python bevorzugt, da das Verzeichnis bereits von mehreren anderen Programmen analog zu /usr/local verwendet wird. [7] [11]

Mac OS X-Hinweise

Auf Mac OS X verwendet Python ebenfalls das ~/.local-Verzeichnis. [12] Framework-Builds von Python schließen ~/Library/Python/2.6/site-packages als zusätzlichen Suchpfad ein.

Implementierung

Das site-Modul erhält eine neue Methode adduserpackage(), die das entsprechende Verzeichnis zum Suchpfad hinzufügt. Das Verzeichnis wird nicht hinzugefügt, wenn es beim Start von Python nicht existiert. Der Speicherort des Benutzer-site-Verzeichnisses und des Benutzer-Basisverzeichnisses wird jedoch in einer internen Variablen für distutils gespeichert.

Das Benutzer-site-Verzeichnis wird vor den systemweiten site-Verzeichnissen, aber nach den Suchpfaden von Python und PYTHONPATH hinzugefügt. Diese Konfiguration ermöglicht es dem Benutzer, eine andere Version eines Pakets zu installieren als der Systemadministrator, verhindert jedoch, dass der Benutzer versehentlich ein stdlib-Modul überschreibt. Stdlib-Module können immer noch mit PYTHONPATH überschrieben werden.

Aus Sicherheitsgründen wird das Benutzer-site-Verzeichnis nicht zu sys.path hinzugefügt, wenn die effektive Benutzer-ID oder Gruppen-ID nicht mit der Prozess-UID/GID übereinstimmt [9]. Dies ist eine zusätzliche Barriere gegen Code-Injektion in SUID-Apps. Python SUID-Skripte müssen jedoch immer die Optionen -E und -s verwenden, sonst können Benutzer ihren eigenen Code einschleusen.

Das Benutzer-site-Verzeichnis kann mit der neuen Option -s oder der Umgebungsvariable PYTHONNOUSERSITE unterdrückt werden. Das Feature kann global deaktiviert werden, indem site.ENABLE_USER_SITE auf den Wert False gesetzt wird. Dies muss durch Bearbeiten von site.py erfolgen. Es kann nicht in sitecustomize.py oder später geändert werden.

Der Pfad zum Benutzer-Basisverzeichnis kann mit der Umgebungsvariable PYTHONUSERBASE überschrieben werden. Der Standardpfad wird verwendet, wenn PYTHONUSERBASE nicht gesetzt oder leer ist.

distutils.command.install (setup.py install) erhält ein neues Argument --user, um Pakete im Benutzer-site-Verzeichnis zu installieren. Die erforderlichen Verzeichnisse werden bei Bedarf erstellt.

distutils.command.build_ext (setup.py build_ext) erhält ein neues Argument --user, das die include/- und lib/-Verzeichnisse im Benutzer-Basisverzeichnis zu den Suchpfaden für Header-Dateien und Bibliotheken hinzufügt. Es fügt auch das lib/-Verzeichnis zu rpath hinzu.

Das site-Modul erhält zwei Argumente --user-base und --user-site, um den Pfad zum Benutzer-Basis- oder Benutzer-site-Verzeichnis auf die Standardausgabe zu drucken. Das Feature ist für Skripting gedacht, z.B. ./configure --prefix $(python2.5 -m site --user-base)

distutils.sysconfig erhält Methoden, um auf die privaten Variablen von site zuzugreifen. (noch nicht implementiert)

Der Windows-Updater muss ebenfalls aktualisiert werden. Er sollte einen Menüpunkt erstellen, der das Benutzer-site-Verzeichnis in einem neuen Explorer-Fenster öffnet.

Abwärtskompatibilität

TBD

Referenzimplementierung

Eine Referenzimplementierung ist im Bugtracker verfügbar. [4]

Referenzen

[6] Erster Vorschlag für ein benutzerbezogenes site-packages-Verzeichnis https://mail.python.org/archives/list/python-dev@python.org/message/V23CUKRH3VCHFLV33ADMHJSM53STPA7I/


Quelle: https://github.com/python/peps/blob/main/peps/pep-0370.rst

Zuletzt geändert: 2025-02-01 08:55:40 GMT