PEP 297 – Unterstützung für System-Upgrades
- Autor:
- Marc-André Lemburg <mal at lemburg.com>
- Status:
- Abgelehnt
- Typ:
- Standards Track
- Erstellt:
- 19. Jul. 2001
- Python-Version:
- 2.6
- Post-History:
Inhaltsverzeichnis
Ablehnungsbescheid
Dieser PEP wurde mangels signifikanten Interesses abgelehnt.
Zusammenfassung
Dieser PEP schlägt Strategien vor, die es erlauben, die Python-Standardbibliothek in Teilen zu aktualisieren, ohne die vollständige Distribution neu installieren zu müssen oder auf eine neue Patch-Level-Version warten zu müssen.
Problem
Python erlaubt standardmäßig nicht das Überschreiben von Modulen oder Paketen in der Standardbibliothek. Obwohl dies durch die Definition einer PYTHONPATH Umgebungsvariablen möglich ist (die in dieser Variablen definierten Pfade werden vor den Pfad der Python-Standardbibliothek gestellt), gibt es keine standardmäßige Methode, dies ohne Änderung der Konfiguration zu erreichen.
Da die Python-Standardbibliothek zunehmend Pakete enthält, die auch separat verfügbar sind, z.B. die distutils-, email- und PyXML-Pakete, die auch unabhängig von der Python-Distribution installiert werden können, ist es wünschenswert, eine Option zu haben, diese Pakete zu aktualisieren, ohne auf eine neue Patch-Level-Version des Python-Interpreters warten zu müssen, um die Änderungen mitzubringen.
Gelegentlich kann es auch wünschenswert sein, Module der Standardbibliothek zu aktualisieren, ohne den gesamten Python-Release-Zyklus durchlaufen zu müssen, z.B. um Hotfixes für Sicherheitsprobleme bereitzustellen.
Vorgeschlagene Lösungen
Dieser PEP schlägt zwei unterschiedliche, aber nicht notwendigerweise widersprüchliche Lösungen vor
- Hinzufügen eines neuen Standard-Suchpfads zu
sys.path:$stdlibpath/system-packagesdirekt vor dem$stdlibpathEintrag. Dies ergänzt den bereits vorhandenen Eintrag für Site-Add-ons$stdlibpath/site-packages, der zur Laufzeit des Interpreters ansys.pathangehängt wird.Um diesen neuen Standard-Speicherort zu nutzen, muss distutils die Unterstützung für die Installation bestimmter Pakete in
$stdlibpath/system-packagesstatt im Standard-Speicherort für Drittanbieter-Pakete$stdlibpath/site-packageserweitern. - Anpassen von distutils, um für System-Upgrades direkt in
$stdlibpathstatt in$stdlibpath/site-packageszu installieren.
Die erste Lösung hat einige Vorteile gegenüber der zweiten
- Upgrades können leicht identifiziert werden (einfach in
$stdlibpath/system-packagesnachschauen) - Upgrades können deinstalliert werden, ohne die restliche Interpreter-Installation zu beeinträchtigen
- Module können virtuell aus Paketen entfernt werden; dies liegt an der Art und Weise, wie Python Pakete importiert: Sobald es das Verzeichnis des Top-Level-Pakets gefunden hat, bleibt es in diesem Verzeichnis für alle nachfolgenden Paket-Submodul-Imports
- Der Ansatz hat insgesamt ein viel saubereres Design als der "hackige" Ansatz, auf einer bestehenden Installation aufzubauen
Die einzigen Vorteile des zweiten Ansatzes sind, dass der Python-Interpreter nicht geändert werden muss und er mit älteren Python-Versionen funktioniert.
Beide Lösungen erfordern Änderungen an distutils. Diese Änderungen können auch von Paketautoren implementiert werden, aber es wäre besser, eine standardmäßige Methode zu definieren, um das vorgeschlagene Verhalten zu aktivieren.
Umfang
Lösung 1: Python 2.6 und höher
Lösung 2: Alle von distutils unterstützten Python-Versionen
Danksagungen
Keine
Referenzen
Keine
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0297.rst
Zuletzt geändert: 2025-02-01 08:55:40 GMT