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

Python Enhancement Proposals

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

Inhaltsverzeichnis

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.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.


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

Zuletzt geändert: 2025-05-09 13:52:32 GMT