PEP 775 – Zlib für das Erstellen von CPython erforderlich
- Autor:
- Gregory P. Smith <greg at krypto.org>, Stan Ulbrych <stanulbrych at gmail.com>, Petr Viktorin <encukou at gmail.com>
- Discussions-To:
- Discourse thread
- Status:
- Zurückgezogen
- Typ:
- Standards Track
- Erstellt:
- 24-Feb-2025
- Python-Version:
- 3.14
- Post-History:
- 23-Jan-2023, 01-Mar-2025
Zusammenfassung
Das Erstellen von CPython ohne die zlib-Kompressionsbibliothek wird nicht mehr unterstützt, und das Modul zlib wird in der Standardbibliothek erforderlich sein. Die einzige Ausnahme ist WASI, da zlib derzeit auf WASI in CPython nicht unterstützt wird. Das Erstellen des Interpreters ohne zlib ist möglicherweise weiterhin möglich, aber formell nicht unterstützt.
Rücknahme eines PEP
Diese PEP wurde von den Autoren am 07.05.2025 zurückgezogen. Nach weiterer Überlegung stellten wir fest, dass sie keinen ausreichenden Wert bot und auf erhebliches negatives Feedback stieß, insbesondere hinsichtlich der vorgeschlagenen Ausnahme für WASI.
Motivation
Die zlib-Bibliothek, die das Python-Modul zlib antreibt, ist auf allen unterstützten Systemen außer WASI verfügbar.
Viele Wheels auf PyPI, einschließlich des pip-Installationsprogramms, erfordern zlib. Benutzer von pip würden CPython ohne zlib als defekt betrachten, bemerken dies aber meist nicht, da alle wichtigen CPython-Builds zlib enthalten.
Auch die CPython-Entwickler bemerken dies nicht wirklich. Es stellt sich heraus, dass zum Zeitpunkt der Erstellung mindestens ein CPython-Test ohne zlib fehlschlägt (der „skip“-Decorator in test_peg_generator.test_c_parser wird zu spät angewendet), aber unsere CI hat dies nicht erfasst.
Diese PEP behandelt dies als ein Problem der Dokumentation und der Kommunikation. In der Praxis unterstützen wir das Erstellen von CPython ohne zlib bereits nicht; wir sollten dies einfach sagen.
Begründung
Es gibt mögliche Anwendungsfälle für zlib-lose Builds, wie z. B. Embedding und Bootstrapping, sowie unvorhergesehene. Daher entfernen wir die Unterstützung für zlib-lose Systeme nicht; wir kennzeichnen sie als nicht unterstützt und laden betroffene Benutzer ein, ihre eigenen Tests durchzuführen oder Anwendungsfälle mitzuteilen, die uns dazu veranlassen könnten, diese Entscheidung zu überdenken.
zlib wird auf der WASI-Plattform noch nicht standardmäßig verwendet – hauptsächlich, weil die Hinzufügung bisher keine Priorität hatte. (Beachten Sie, dass Pyodide, die wichtigste „real-world“-CPython-Distribution für WASI, zlib enthält.) Wir nutzen dies als Gelegenheit, eine Plattform ohne zlib weiter zu testen, damit wir nicht unbeabsichtigt nicht unterstützte Builds brechen.
Spezifikation
In Modulen der Standardbibliothek, die zlib für optionale Funktionalität verwenden, löst diese Funktionalität bei Verwendung einen ImportError aus. Code zur Generierung „freundlicherer“ Fehlermeldungen oder zur Vorabprüfung, ob zlib verfügbar ist, wird entfernt. Alle Funktionalität, die nicht mit zlib zusammenhängt, wird weiterhin nutzbar sein, wenn zlib fehlt.
Dies betrifft die folgenden Module und weitere, die transitiv davon abhängen
shutil(Archive-Formategztarundzip)tarfile,zipfile,zipimport,zipapp(Archivkompression)codecs(zlib_codec)
shutil.get_archive_formats() wird zip und gztar immer als registrierte Formate enthalten, auch wenn sie aufgrund des fehlenden zlib nicht nutzbar sind.
Das Skript configure gibt eine Warnung aus, wenn zlib auf Plattformen außer WASI nicht gefunden wird.
test_zlib wird auf Plattformen außer WASI fehlschlagen. Alle anderen Tests werden weiterhin übersprungen – das heißt, Verwendungen von @test.support.requires_zlib bleiben erhalten – zum Nutzen von WASI, nicht unterstützten Builds und möglichen Rückgängigmachungen.
PEP 11 wird angepasst, um „Systeme ohne zlib, außer WASI“ als nicht unterstützt zu kennzeichnen.
Abwärtskompatibilität
In der Praxis ändert sich nichts Wesentliches, außer in Fehlerfällen – zum Beispiel werden Versuche, Tar-Kompression ohne verfügbares zlib zu verwenden, einen ImportError und nicht einen CompressionError auslösen.
Sicherheitsimplikationen
Keine bekannt.
Wie man das lehrt
Wir erwarten nicht, dass sich Anweisungen ändern müssen, da zlib in allen relevanten Kontexten bereits verfügbar ist.
Referenzimplementierung
Eine Referenzimplementierung finden Sie in einem Pull Request zum CPython-Repository, python/cpython#130297
Zukünftige Arbeiten
In Zukunft, wenn keine Anwendungsfälle für zlib-lose Builds gefunden werden, kann zlib vollständig erforderlich gemacht werden. Die wichtigsten Änderungen dafür wären, dass das configure-Skript einen harten Fehler auslöst und @test.support.requires_zlib entfernt wird.
Urheberrecht
Dieses Dokument wird in die Public Domain oder unter die CC0-1.0-Universal-Lizenz gestellt, je nachdem, welche Lizenz permissiver ist.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0775.rst
Zuletzt geändert: 2025-05-09 13:52:32 GMT