PEP 715 – Deaktivierung von bdist_egg Distribution Uploads auf PyPI
- Autor:
- William Woodruff <william at yossarian.net>
- Sponsor:
- Donald Stufft <donald at stufft.io>
- PEP-Delegate:
- Donald Stufft <donald at stufft.io>
- Discussions-To:
- Discourse thread
- Status:
- Final
- Typ:
- Standards Track
- Thema:
- Packaging
- Erstellt:
- 06. Jun 2023
- Post-History:
- 09. Jun 2023
- Resolution:
- 24. Jun 2023
Zusammenfassung
Diese PEP empfiehlt die Deprecations und anschließende Deaktivierung neuer Uploads des bdist_egg Distributionstyps auf PyPI. Parallel dazu empfiehlt diese PEP die Deprecations und anschließende Deaktivierung neuer Uploads von Distributionsdateinamen mit der .egg Endung.
Nach dieser PEP wird PyPI nur noch neue Uploads der Distributionstypen sdist und bdist_wheel akzeptieren, die Dateien mit den Endungen .tar.gz/.zip bzw. .whl entsprechen.
Diese PEP empfiehlt nicht, bereits hochgeladene bdist_egg Distributionen oder Dateien mit der .egg Endung zu entfernen oder anderweitig zu beeinflussen.
Begründung
Vorangegangene Arbeiten
Die Grundlage für diesen Vorschlag wurde mit PEP 527 geschaffen, die die Deprecations und eventualle Entfernung der Upload-Unterstützung für eine Handvoll nicht (unter)genutzter Dateiendungen und Distributionstypen vorschlug.
Insbesondere schlug PEP 527 die Entfernung der Distributionstypen bdist_dumb, bdist_rpm, bdist_dmg, bdist_msi und bdist_wininst vor, sowie der Dateiendungen .tar, .tar.bz2, .tar.xz, .tar.Z, .tgz und .tbz in Distributionsdateinamen.
PEP 527 wurde vollständig mit PR #7529 zu Warehouse umgesetzt, der am 13. April 2020 zusammengeführt wurde.
Das bdist_egg Format
Der bdist_egg Dateityp identifiziert Distributionen im Egg-Format. Das Egg-Format wurde 2004 von setuptools eingeführt und ist funktional ungefähr gleichwertig mit dem Wheel-Format, das erstmals 2012 mit PEP 427 als standardisiertes Format für Build-Distributionen eingeführt wurde.
Trotz seiner Langlebigkeit hat das Egg-Format eine begrenzte Verbreitung auf PyPI erfahren. Einige Beobachtungen aus diesem Issue:
- Im Monat Mai 2023 machten
bdist_eggUploads 0,2 % aller Distribution-Uploads auf PyPI aus; piphat seine--eggOption 2016 deprecated;setuptoolsbetrachtet die Egg-Unterstützung seit 2019 als deprecated;buildunterstützt nur die Dateitypensdistundbdist_wheel.
Angesichts dessen schlägt diese PEP die Entfernung des bdist_egg Formats unter den gleichen Begründungen wie in PEP 527 vor, nämlich:
- Egg-Distributionen sind für das breitere Ökosystem von begrenztem Nutzen und stellen daher eine nicht-reziproke Wartungsbelastung dar;
- Ein zusätzliches Build-Distributionsformat ist für Endbenutzer verwirrend, die es fälschlicherweise dem Wheel-Format vorziehen könnten;
Diese PEP bietet *zusätzlich* ein Argument für die Entfernung, das auf Standardisierung und Duplizierung basiert: Das Egg-Format ist nicht durch eine PEP oder einen anderen Community-Standard standardisiert und überschneidet sich stark mit seiner standardisierten und gut unterstützten Alternative (Wheel).
Die .egg Dateiendung
Die Dateiendung .egg wird ausschließlich für Distributionen des bdist_egg Formats verwendet. Daher dient sie keinem Zweck in einem Szenario, in dem PyPI neue Distribution-Uploads für bdist_egg Distributionen deaktiviert.
Entfernungsprozess
Diese PEP schlägt NICHT vor, bereits auf PyPI hochgeladene Dateien zu entfernen, sondern nur, neue Uploads zu verbieten.
PyPI wird eine Deprecationsperiode von einem Monat anbieten. Zu Beginn der Deprecationsperiode erhalten Maintainer von Projekten, die seit dem 1. Januar 2023 ein oder mehrere Egg-Distributionen hochgeladen haben, eine einmalige E-Mail, die sie über das bevorstehende Ende der Unterstützung für Egg-Distribution-Uploads informiert.
Während der Deprecationsperiode dürfen Benutzer weiterhin Egg-Distributionen für neue und bestehende Projekte hochladen. Das Hochladen einer Egg-Distribution während dieser Zeit sendet auch allen Maintainern des Projekts eine ähnliche E-Mail wie oben, die sie an das bevorstehende Ende der Unterstützung erinnert.
Nach Ablauf der Deprecationsperiode wird die Unterstützung für das Hochladen von Egg-Distributionen auf PyPI eingestellt.
Vorhandene Lösungen
Der obige Entfernungsprozess basiert auf dem von PEP 527, mit folgenden Änderungen:
- Alle Projekte dürfen während der Deprecationsperiode weiterhin Eggs hochladen, nicht nur diejenigen, die dies zuvor getan haben.
- Das Hochladen eines Eggs während der Deprecationsperiode löst zusätzlich zur einmaligen E-Mail zu Beginn eine E-Mail an die Maintainer aus.
Abwärtskompatibilität
Begrenzte Auswirkungen
Wie im Abschnitt zur Begründung erwähnt, wird erwartet, dass diese PEP keine Auswirkungen auf die überwiegende Mehrheit der PyPI-Benutzer und -Projekte haben wird, und es gab umfangreiche Koordination in der Community in den letzten 1,5 Jahren, um die Auswirkungen auf die wenigen letzten Anwendungsfälle zu minimieren.
Gehostete Dateien
Diese PEP schlägt NICHT die Entfernung von bereits auf PyPI hochgeladenen Egg-Distributionen vor. Alle zuvor hochgeladenen Egg-Distributionen bleiben herunterladbar, um sicherzustellen, dass bestehende Benutzer sie weiterhin herunterladen können.
Deprecationsperiode
Diese PEP verwendet den oben dokumentierten Entfernungsprozess, der eine Deprecationsperiode von 1 Monat für Projekte vorsieht, die zuvor Egg-Distributionen auf PyPI hochgeladen haben.
Nach Ablauf der Deprecationsperiode wird die Unterstützung für das Hochladen neuer Egg-Distributionen auf PyPI eingestellt.
Sicherheitsimplikationen
Diese PEP identifiziert keine positiven oder negativen Sicherheitsauswirkungen im Zusammenhang mit der Entfernung der Upload-Unterstützung für Egg-Distributionen.
Wie man das lehrt
Als Teil des Entfernungsprozesses wird PyPI E-Mails an alle Maintainer von Projekten senden, die im Jahr 2023 zuvor Egg-Distributionen hochgeladen haben.
Zusätzlich wird PyPI einen Beitrag auf dem PyPI-Blog veröffentlichen, der den Beginn und das Ende der Deprecationsperiode öffentlich bekannt gibt.
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-0715.rst
Zuletzt geändert: 2025-02-01 08:55:40 GMT