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

Python Enhancement Proposals

PEP 1 – PEP Zweck und Richtlinien

Autor:
Barry Warsaw, Jeremy Hylton, David Goodger, Alyssa Coghlan
Status:
Aktiv
Typ:
Prozess
Erstellt:
13. Juni 2000
Post-History:
21. März 2001, 29. Juli 2002, 03. Mai 2003, 05. Mai 2012, 07. April 2013

Inhaltsverzeichnis

Was ist ein PEP?

PEP steht für Python Enhancement Proposal (Python-Verbesserungsvorschlag). Ein PEP ist ein Design-Dokument, das der Python-Community Informationen liefert oder ein neues Feature für Python, dessen Prozesse oder Umgebung beschreibt. Das PEP sollte eine präzise technische Spezifikation des Features und eine Begründung für das Feature liefern.

Wir beabsichtigen, dass PEPs die primären Mechanismen zum Vorschlagen neuer großer Features, zum Sammeln von Community-Input zu einem Thema und zur Dokumentation der Designentscheidungen sind, die in Python eingeflossen sind. Der Autor des PEPs ist dafür verantwortlich, Konsens in der Community aufzubauen und abweichende Meinungen zu dokumentieren.

Da die PEPs als Textdateien in einem versionierten Repository gepflegt werden, ist ihr Versionsverlauf die historische Aufzeichnung des Feature-Vorschlags. Dieser historische Verlauf ist über die normalen git-Befehle zum Abrufen älterer Versionen verfügbar und kann auch auf GitHub durchsucht werden.

Zielgruppe von PEPs

Die typische Hauptzielgruppe für PEPs sind die Core-Entwickler des CPython-Referenzinterpreters und deren gewählter Steering Council, sowie Entwickler anderer Implementierungen der Python-Sprachspezifikation.

Andere Teile der Python-Community können den Prozess jedoch auch nutzen (insbesondere für Informationelle PEPs), um erwartete API-Konventionen zu dokumentieren und komplexe Design-Koordinationsprobleme zu bewältigen, die eine Zusammenarbeit über mehrere Projekte hinweg erfordern.

Arten von PEPs

Es gibt drei Arten von PEPs

  1. Ein PEP im Standards Track beschreibt ein neues Feature oder eine neue Implementierung für Python. Es kann auch einen Interoperabilitätsstandard beschreiben, der außerhalb der Standardbibliothek für aktuelle Python-Versionen unterstützt wird, bevor ein nachfolgender PEP die Unterstützung der Standardbibliothek in einer zukünftigen Version hinzufügt.
  2. Ein Informational PEP beschreibt ein Python-Designproblem oder liefert allgemeine Richtlinien oder Informationen für die Python-Community, schlägt jedoch kein neues Feature vor. Informationelle PEPs stellen nicht unbedingt einen Konsens oder eine Empfehlung der Python-Community dar, daher steht es Benutzern und Implementierern frei, informationelle PEPs zu ignorieren oder deren Ratschläge zu befolgen.
  3. Ein Process PEP beschreibt einen Prozess, der Python umgibt, oder schlägt eine Änderung (oder ein Ereignis) in einem Prozess vor. Process PEPs ähneln PEPs im Standards Track, gelten aber für andere Bereiche als die Python-Sprache selbst. Sie können eine Implementierung vorschlagen, aber nicht für den Python-Code; sie erfordern oft Community-Konsens; im Gegensatz zu Informationellen PEPs sind sie mehr als Empfehlungen, und Benutzer können sie typischerweise nicht ignorieren. Beispiele hierfür sind Verfahren, Richtlinien, Änderungen am Entscheidungsprozess und Änderungen an den Tools oder der Umgebung, die in der Python-Entwicklung verwendet werden. Jedes Meta-PEP gilt ebenfalls als Process PEP.

PEP-Workflow

Python Steering Council

Es gibt mehrere Verweise in diesem PEP auf den "Steering Council" oder "Council". Dies bezieht sich auf die aktuellen Mitglieder des gewählten Steering Council, wie in PEP 13 beschrieben, in ihrer Rolle als endgültige Autorität darüber, ob PEPs angenommen oder abgelehnt werden.

Python Core-Entwickler

Es gibt mehrere Verweise in diesem PEP auf "Core-Entwickler". Dies bezieht sich auf die derzeit aktiven Mitglieder des Python-Core-Teams, wie in PEP 13 beschrieben.

BDFL von Python

Frühere Versionen dieses PEPs verwendeten den Titel "BDFL-Delegate" für PEP-Entscheidungsträger. Dies war ein historischer Verweis auf das frühere Governance-Modell von Python, bei dem die gesamte Design-Autorität letztendlich von Guido van Rossum, dem ursprünglichen Schöpfer der Python-Programmiersprache, abgeleitet wurde. Im Gegensatz dazu leitet sich die Design-Autorität des Steering Council von ihrer Wahl durch die derzeit aktiven Core-Entwickler ab. Anstelle von BDFL-Delegate wird nun PEP-Delegate verwendet.

PEP-Editoren

Die PEP-Editoren sind Einzelpersonen, die für die Verwaltung der administrativen und redaktionellen Aspekte des PEP-Workflows verantwortlich sind (z. B. Zuweisung von PEP-Nummern und Änderung ihres Status). Details finden Sie unter Verantwortlichkeiten und Workflow von PEP-Editoren.

Die PEP-Editorschaft erfolgt auf Einladung der aktuellen Editoren und sie können per Erwähnung von @python/pep-editors auf GitHub kontaktiert werden. Der gesamte PEP-Workflow kann über die Issues und Pull-Requests des GitHub PEP-Repositorys abgewickelt werden.

Beginnen Sie mit einer Idee für Python

Der PEP-Prozess beginnt mit einer neuen Idee für Python. Es wird dringend empfohlen, dass ein einzelnes PEP einen einzelnen Hauptvorschlag oder eine neue Idee enthält; je fokussierter das PEP, desto erfolgreicher ist es in der Regel. Die meisten Verbesserungen und Fehlerbehebungen benötigen kein PEP und können direkt im Python Issue Tracker eingereicht werden. Die PEP-Editoren behalten sich das Recht vor, PEP-Vorschläge abzulehnen, wenn sie zu unfokussiert oder zu breit erscheinen. Im Zweifelsfall teilen Sie Ihr PEP in mehrere gut fokussierte auf.

Jedes PEP muss einen Paten haben – jemanden, der das PEP im unten beschriebenen Stil und Format schreibt, die Diskussionen in den entsprechenden Foren betreut und versucht, einen Community-Konsens um die Idee herum aufzubauen. Der PEP-Pate (auch Autor genannt) sollte zunächst versuchen festzustellen, ob die Idee PEP-fähig ist. Das Posten in der Ideen-Kategorie von Python Discourse ist normalerweise der beste Weg, es sei denn, ein spezialisierteres Forum ist geeignet, wie die Typing-Kategorie (für Ideen zur statischen Typisierung) oder die Packaging-Kategorie (für Verpackungsideen) auf Python Discourse.

Die öffentliche Prüfung einer Idee, bevor sie so weit geht, ein PEP zu schreiben, soll dem potenziellen Autor Zeit sparen. Viele Ideen wurden zur Änderung von Python vorgebracht, die aus verschiedenen Gründen abgelehnt wurden. Das Vorabfragen an die Python-Community, ob eine Idee originell ist, hilft, zu viel Zeit für etwas aufzuwenden, das garantiert abgelehnt wird, basierend auf früheren Diskussionen (die Suche im Internet reicht manchmal nicht aus). Es hilft auch sicherzustellen, dass die Idee für die gesamte Community und nicht nur für den Autor relevant ist. Nur weil eine Idee dem Autor gut erscheint, heißt das nicht, dass sie für die meisten Menschen in den meisten Bereichen, in denen Python verwendet wird, funktioniert.

Sobald der Pate die Python-Community gefragt hat, ob eine Idee eine Chance auf Akzeptanz hat, sollte ein Entwurf für ein PEP im oben genannten geeigneten Forum vorgestellt werden. Dies gibt dem Autor die Möglichkeit, den Entwurf des PEPs zu verfeinern, um ihn richtig formatiert und von hoher Qualität zu machen und um anfängliche Bedenken bezüglich des Vorschlags zu adressieren.

Einreichung eines PEPs

Nach der oben genannten anfänglichen Diskussion variiert der Workflow je nachdem, ob einer der Co-Autoren des PEPs Core-Entwickler sind. Wenn einer oder mehrere der Co-Autoren des PEPs Core-Entwickler sind, sind sie für die Einhaltung des unten beschriebenen Prozesses verantwortlich. Andernfalls (d.h. keiner der Co-Autoren sind Core-Entwickler) müssen die PEP-Autoren einen Sponsor für das PEP finden.

Idealerweise wird ein Core-Entwickler als Sponsor identifiziert, aber auch Nicht-Core-Sponsoren können mit Zustimmung des Steering Council ausgewählt werden. Mitglieder des GitHub "PEP-Editoren"-Teams und Mitglieder des Typing Council (PEP 729) sind vorab als Sponsoren genehmigt. Die Aufgabe des Sponsors ist es, dem PEP-Autor Anleitung zu geben, um ihm bei den logistischen Aspekten des PEP-Prozesses zu helfen (ähnlich wie ein Mentor). Ein Sponsor zu sein, disqualifiziert diese Person nicht davon, später ein Co-Autor oder PEP-Delegate zu werden (aber nicht beides). Der Sponsor eines PEPs wird im Feld "Sponsor:" des Headers eingetragen.

Sobald der Sponsor oder die Core-Entwickler, die das PEP co-autorieren, der Meinung sind, dass das PEP zur Einreichung bereit ist, sollte der Vorschlag als Entwurf PEP über eine GitHub Pull Request eingereicht werden. Der Entwurf muss im PEP-Stil geschrieben sein, wie unten beschrieben, andernfalls schlägt er die Überprüfung sofort fehl (obwohl geringfügige Fehler von den Editoren korrigiert werden können).

Der Standard-PEP-Workflow ist

  • Sie, der PEP-Autor, forken Sie das PEP-Repository und erstellen Sie eine Datei namens pep-NNNN.rst, die Ihr neues PEP enthält. NNNN sollte die nächste verfügbare PEP-Nummer sein, die noch nicht von einem veröffentlichten oder in-PR-PEP verwendet wird.
  • Im Header-Feld "PEP:" tragen Sie die PEP-Nummer ein, die Ihrer Dateinamen entspricht, als Ihre Entwurf-PEP-Nummer.
  • Im Header-Feld "Type:" tragen Sie "Standards Track", "Informational" oder "Process" ein, je nach Anwendbarkeit, und für das Feld "Status:" tragen Sie "Draft" ein. Ausführliche Informationen finden Sie unter PEP-Header-Präambel.
  • Aktualisieren Sie .github/CODEOWNERS so, dass alle Co-Autoren oder Sponsoren mit Schreibzugriff auf das PEP-Repository für Ihre neue Datei aufgeführt sind. Dies stellt sicher, dass zukünftige Pull-Requests, die die Datei ändern, ihnen zugewiesen werden.
  • Pushen Sie dies in Ihr GitHub-Fork und reichen Sie einen Pull-Request ein.
  • Die PEP-Editoren überprüfen Ihren PR auf Struktur, Formatierung und andere Fehler. Für ein reST-formatiertes PEP wird PEP 12 als Vorlage bereitgestellt. Es bietet auch eine vollständige Einführung in die reST-Markup-Sprache, die in PEPs verwendet wird. Zulassungskriterien sind
    • Es ist fundiert und vollständig. Die Ideen müssen technisch sinnvoll sein. Die Editoren berücksichtigen nicht, ob sie wahrscheinlich akzeptiert werden.
    • Der Titel beschreibt den Inhalt korrekt.
    • Die Sprache des PEPs (Rechtschreibung, Grammatik, Satzbau usw.) und der Code-Stil (Beispiele sollten mit PEP 7 & PEP 8 übereinstimmen) sollten korrekt und konform sein. Der PEP-Text wird automatisch auf korrekte reStructuredText-Formatierung überprüft, wenn der Pull-Request eingereicht wird. PEPs mit ungültigem reST-Markup werden nicht genehmigt.

    Editoren sind bei dieser anfänglichen Überprüfung im Allgemeinen recht nachsichtig und erwarten, dass Probleme durch den Überprüfungsprozess korrigiert werden. Hinweis: Die Genehmigung des PEPs ist keine Garantie dafür, dass keine peinlichen Fehler vorhanden sind! Korrektheit liegt in der Verantwortung der Autoren und Gutachter, nicht der Editoren.

    Wenn das PEP nicht zur Genehmigung bereit ist, schickt ein Editor es mit spezifischen Anweisungen zur Überarbeitung an den Autor zurück.

  • Nach der Genehmigung weisen sie Ihrem PEP eine Nummer zu.

Nach Abschluss des Überprüfungsprozesses und der Genehmigung durch die PEP-Editoren (beachten Sie, dass dies *nicht* dasselbe ist wie die Annahme Ihres PEPs!) werden sie Ihren Pull-Request auf den Hauptzweig squashen und committen.

Die PEP-Editoren verweigern die Veröffentlichung eines PEPs nicht unangemessen. Gründe für die Verweigerung des PEP-Status sind: Duplizierung von Aufwand, technische Undurchführbarkeit, fehlende ordnungsgemäße Begründung oder keine Berücksichtigung der Abwärtskompatibilität oder Nicht-Übereinstimmung mit der Python-Philosophie. Der Steering Council kann während der Genehmigungsphase konsultiert werden und ist der endgültige Schiedsrichter für die PEP-Fähigkeit eines Entwurfs.

Entwickler mit Schreibzugriff auf das PEP-Repository können PEP-Nummern direkt beanspruchen, indem sie ein neues PEP erstellen und committen. Dabei muss der Entwickler die Aufgaben übernehmen, die normalerweise von den PEP-Editoren erledigt würden (siehe Verantwortlichkeiten und Workflow von PEP-Editoren). Dazu gehört die Sicherstellung, dass die Anfangsversion die erwarteten Standards für die Einreichung eines PEP erfüllt. Alternativ sollten auch Entwickler PEPs über Pull-Requests einreichen. Dabei wird im Allgemeinen erwartet, dass Sie den Prozess selbst abwickeln; wenn Sie Hilfe von PEP-Editoren benötigen, erwähnen Sie @python/pep-editors auf GitHub.

Wenn Aktualisierungen erforderlich sind, kann der PEP-Autor neue Versionen einchecken, wenn er (oder ein kooperierender Entwickler) Schreibzugriff auf das PEP-Repository hat. Die frühzeitige Zuweisung einer PEP-Nummer kann für eine einfache Referenz nützlich sein, insbesondere wenn mehrere Entwurf-PEPs gleichzeitig geprüft werden.

Standards Track PEPs bestehen aus zwei Teilen: einem Design-Dokument und einer Referenzimplementierung. Es wird generell empfohlen, zumindest eine Prototypen-Implementierung gemeinsam mit dem PEP zu entwickeln, da Ideen, die im Prinzip gut klingen, sich manchmal als unpraktisch erweisen, wenn sie dem Test der Implementierung unterzogen werden.

Diskussion eines PEPs

Sobald eine PEP-Nummer zugewiesen wurde und der Entwurf PEP im PEP-Repository eingepflegt ist, sollte ein Diskussions-Thread für das PEP erstellt werden, um einen zentralen Ort für die Diskussion und Überprüfung seines Inhalts zu bieten, und das PEP sollte so aktualisiert werden, dass der Header Discussions-To darauf verweist.

Die PEP-Autoren (oder der Sponsor, falls zutreffend) können jedes vernünftige Forum für die Diskussion auswählen, solange die folgenden Kriterien erfüllt sind

  • Das Forum ist für das Thema des PEPs geeignet.
  • Der Thread ist öffentlich im Web verfügbar, so dass alle Interessierten teilnehmen können.
  • Die Diskussion unterliegt dem Python Community Code of Conduct.
  • Ein direkter Link zum aktuellen Diskussions-Thread wird im PEP unter dem Header Discussions-To angegeben.

Der PEPs-Bereich von Python Discourse ist die bevorzugte Wahl für die meisten neuen PEPs, während historisch die Python-Dev-Mailingliste häufig genutzt wurde. Einige spezialisierte Themen haben spezifische Foren, wie die Typing-Kategorie und die Packaging-Kategorie auf Python Discourse für Typing- und Packaging-PEPs. Wenn sich die PEP-Autoren über das beste Forum unsicher sind, können der PEP-Sponsor und die PEP-Editoren sie entsprechend beraten.

Wenn ein PEP einer signifikanten Neufassung oder anderen größeren, substanziellen Änderungen an seiner vorgeschlagenen Spezifikation unterzogen wird, sollte typischerweise ein neuer Thread im gewählten Forum erstellt werden, um zusätzliches Feedback einzuholen. Wenn dies geschieht, muss der Discussions-To-Link aktualisiert und ein neuer Post-History-Eintrag hinzugefügt werden, der auf diesen neuen Thread verweist.

Wenn es nicht als Diskussionsforum gewählt wird, sollte ein kurzer Ankündigungspost im PEPs-Bereich gemacht werden, der mindestens einen Link zum gerenderten PEP und zum Discussions-To-Thread enthält, wenn der Entwurf PEP im Repository committet wird und wenn eine ausreichend große Änderung vorgenommen wird, um einen neuen Thread auszulösen.

PEP-Autoren sind dafür verantwortlich, Community-Feedback zu einem PEP zu sammeln, bevor sie es zur Überprüfung einreichen. Um jedoch langwierige und offene Diskussionen zu vermeiden, sollten Strategien wie das Einholen von privatem oder enger zugeschnittenem Feedback in der frühen Designphase, die Zusammenarbeit mit anderen Community-Mitgliedern mit Expertise im Thema des PEPs und die Auswahl einer entsprechend spezialisierten Diskussion für das Thema des PEPs (falls zutreffend) in Betracht gezogen werden. PEP-Autoren sollten hier ihr Ermessen walten lassen.

Sobald das PEP eine Nummer erhalten und im PEP-Repository eingepflegt wurde, sollten wesentliche Probleme generell im kanonischen öffentlichen Thread diskutiert werden, anstatt in privaten Kanälen, GitHub Pull Request Reviews oder auf irrelevanten Plattformen. Dies stellt sicher, dass jeder folgen und beitragen kann, vermeidet die Fragmentierung der Diskussion und stellt sicher, dass sie als Teil des PEP-Überprüfungsprozesses vollständig berücksichtigt wird. Kommentare, Unterstützung, Bedenken und anderes Feedback zu diesem designierten Thread sind ein kritischer Teil dessen, was der Steering Council oder PEP-Delegate bei der Überprüfung des PEPs berücksichtigt.

PEP-Überprüfung und -Entscheidung

Sobald die Autoren ein PEP fertiggestellt haben, können sie eine Überprüfung auf Stil und Konsistenz durch die PEP-Editoren anfordern. Die inhaltliche Überprüfung und Annahme des PEPs liegt jedoch letztendlich in der Verantwortung des Steering Council, die formal durch die Eröffnung eines Steering Council Issues eingeleitet wird, sobald die Autoren (und der Sponsor, falls vorhanden) der Meinung sind, dass das PEP für die endgültige Überprüfung und Entscheidung bereit ist.

Um den Prozess in ausgewählten Fällen zu beschleunigen (z. B. wenn eine Änderung eindeutig vorteilhaft und zur Annahme bereit ist, das PEP aber noch nicht formell zur Überprüfung eingereicht wurde), kann der Steering Council auch eine PEP-Überprüfung einleiten, indem er zunächst den PEP-Autor(en) benachrichtigt und ihnen die Möglichkeit gibt, Überarbeitungen vorzunehmen.

Die endgültige Autorität für die PEP-Annahme ist der Steering Council. Wenn jedoch ein neues PEP vorgelegt wird, kann jeder Core-Entwickler, der glaubt, über die nötige Erfahrung zu verfügen, um die endgültige Entscheidung über dieses PEP zu treffen, anbieten, als dessen PEP-Delegate zu fungieren, indem er dem Steering Council seine Absicht mitteilt. Wenn der Steering Council sein Angebot annimmt, hat der PEP-Delegate die Befugnis, dieses PEP anzunehmen oder abzulehnen. Für PEPs, die das Python-Typsystem betreffen, gibt das Typing Council (PEP 729) eine Empfehlung an den Steering Council ab. Um eine solche Empfehlung anzufordern, öffnen Sie ein Issue im Typing Council Issue Tracker.

Der Begriff "PEP-Delegate" wird im Steering Council Governance-Modell für den designierten Entscheidungsträger des PEPs verwendet, der im Feld "PEP-Delegate" im Header des PEPs eingetragen ist. Der Begriff "BDFL-Delegate" ist ein veralteter Alias für PEP-Delegate, ein Relikt aus der Zeit, als Python von einem BDFL geführt wurde. Alle älteren Verweise auf "BDFL-Delegate" sollten als gleichbedeutend mit "PEP-Delegate" behandelt werden.

Eine Person, die anbietet, sich als PEP-Delegate zu nominieren, muss die relevanten Autoren und (falls vorhanden) den Sponsor des PEPs benachrichtigen und ihren Antrag an den Steering Council stellen (was über ein neues Issue erfolgen kann). Diejenigen, die diese Verantwortung übernehmen, können jederzeit zusätzlichen Rat vom Steering Council einholen und sind auch verpflichtet, die Ratschläge und Perspektiven anderer Core-Entwickler zu berücksichtigen.

Der Steering Council wird solche Selbstnominierungen in der Regel standardmäßig genehmigen, kann sie aber auch ablehnen. Mögliche Gründe für die Ablehnung einer Selbstnominierung als PEP-Delegate durch den Steering Council sind unter anderem die Wahrnehmung eines potenziellen Interessenkonflikts (z. B. die Arbeit für dieselbe Organisation wie der PEP-Einreicher) oder einfach die Ansicht, dass ein anderer potenzieller PEP-Delegate besser geeignet ist. Wenn Core-Entwickler (oder andere Community-Mitglieder) Bedenken hinsichtlich der Eignung eines PEP-Delegates für ein bestimmtes PEP haben, können sie den Steering Council bitten, die Delegation zu überprüfen.

Wenn sich kein Freiwilliger meldet, wird der Steering Council Core-Entwickler (und potenziell andere Mitglieder der Python-Community) mit relevantem Fachwissen ansprechen, um einen Kandidaten zu identifizieren, der bereit ist, als PEP-Delegate für dieses PEP zu fungieren. Wenn kein geeigneter Kandidat gefunden werden kann, wird das PEP als "Deferred" (zurückgestellt) markiert, bis einer verfügbar ist.

Zuvor ernannte PEP-Delegates können zurücktreten oder vom Council zum Rücktritt aufgefordert werden. In diesem Fall wird ein neuer PEP-Delegate auf dieselbe Weise ernannt wie für ein neues PEP (einschließlich der Rückstellung des PEPs, wenn kein geeigneter Ersatz gefunden werden kann). Sollte ein PEP-Delegate zum Rücktritt aufgefordert werden, hat dies Vorrang vor jeder früheren Annahme oder Ablehnung des PEPs, und es wird wieder in den Status "Draft" versetzt.

Wenn solche stehenden Delegationen eingerichtet werden, wird der Steering Council ausreichende öffentliche Aufzeichnungen führen, damit nachfolgende Councils, die Core-Entwickler und die breitere Python-Community die bestehenden Delegationen, deren Gründe und die Umstände, unter denen sie nicht mehr benötigt werden, verstehen können.

Damit ein PEP angenommen werden kann, muss es bestimmte Mindestkriterien erfüllen. Es muss eine klare und vollständige Beschreibung der vorgeschlagenen Verbesserung sein. Die Verbesserung muss eine Nettobesserung darstellen. Die vorgeschlagene Implementierung, falls zutreffend, muss solide sein und darf den Interpreter nicht übermäßig verkomplizieren. Schließlich muss ein vorgeschlagener Enhancement "pythonisch" sein, um vom Steering Council akzeptiert zu werden. (Allerdings ist "pythonisch" ein unpräziser Begriff; er kann als das definiert werden, was vom Steering Council akzeptiert wird. Diese Logik ist bewusst zirkulär.) Siehe PEP 2 für die Annahmekriterien für Module der Standardbibliothek.

Sofern nicht anders vom Steering Council genehmigt, werden Bekanntmachungen über die PEP-Entscheidung im PEPs-Bereich auf Python Discourse veröffentlicht.

Sobald ein PEP angenommen wurde, muss die Referenzimplementierung abgeschlossen werden. Wenn die Referenzimplementierung abgeschlossen und in das Hauptquellcode-Repository integriert ist, wird der Status auf "Final" geändert.

Um das Sammeln von zusätzlichem Design- und Schnittstellenfeedback zu ermöglichen, bevor eine langfristige Stabilität für ein Sprachfeature oder eine Standardbibliotheks-API zugesagt wird, kann ein PEP auch als "Provisional" (vorläufig) markiert werden. Dies ist kurz für "Provisionally Accepted" (vorläufig angenommen) und bedeutet, dass der Vorschlag zur Aufnahme in die Referenzimplementierung angenommen wurde, aber zusätzliches Benutzerfeedback benötigt wird, bevor das vollständige Design als "Final" betrachtet werden kann. Im Gegensatz zu regulären angenommenen PEPs können vorläufig angenommene PEPs noch abgelehnt oder zurückgezogen werden, *auch nachdem die zugehörigen Änderungen in eine Python-Version aufgenommen wurden*.

Wo immer möglich, wird es als vorzuziehen angesehen, den Umfang eines Vorschlags zu reduzieren, um die Notwendigkeit der Nutzung des "Provisional"-Status zu vermeiden (z. B. durch Verschiebung einiger Features auf spätere PEPs), da dieser Status zu Problemen mit der Versionskompatibilität im breiteren Python-Ökosystem führen kann. PEP 411 enthält weitere Details zu potenziellen Anwendungsfällen für den Provisional-Status.

Ein PEP kann auch den Status "Deferred" (zurückgestellt) erhalten. Der PEP-Autor oder ein Editor kann dem PEP diesen Status zuweisen, wenn keine Fortschritte bei dem PEP erzielt werden. Sobald ein PEP zurückgestellt ist, kann ein PEP-Editor es wieder in den Entwurfsstatus versetzen.

Ein PEP kann auch "Rejected" (abgelehnt) werden. Vielleicht war es doch keine gute Idee. Es ist dennoch wichtig, die Aufzeichnung darüber zu führen. Der Status "Withdrawn" (zurückgezogen) ist ähnlich – er bedeutet, dass der PEP-Autor selbst entschieden hat, dass das PEP tatsächlich eine schlechte Idee ist oder dass ein konkurrierender Vorschlag eine bessere Alternative ist.

Wenn ein PEP angenommen, abgelehnt oder zurückgezogen wird, sollte das PEP entsprechend aktualisiert werden. Zusätzlich zur Aktualisierung des Statusfeldes sollte mindestens der Header "Resolution" mit einem direkten Link zum relevanten Beitrag hinzugefügt werden, der eine Entscheidung über das PEP trifft.

PEPs können auch durch ein anderes PEP ersetzt werden, was das Original obsolet macht. Dies ist für Informationelle PEPs vorgesehen, bei denen Version 2 einer API Version 1 ersetzen kann.

Die möglichen Pfade des Status von PEPs sind wie folgt

PEP process flow diagram

Obwohl im Diagramm nicht gezeigt, können "Accepted" PEPs technisch zu "Rejected" oder "Withdrawn" übergehen, auch nach der Annahme. Dies geschieht nur, wenn der Implementierungsprozess grundlegende Fehler im Design aufdeckt, die vor der Annahme des PEPs nicht bemerkt wurden. Im Gegensatz zu Provisional PEPs sind diese Übergänge nur gestattet, wenn der angenommene Vorschlag *nicht* in eine Python-Version aufgenommen wurde – freigegebene Änderungen müssen stattdessen den regulären Deprecationsprozess durchlaufen (was ein neues PEP mit der Begründung für die Deprecation erfordern kann).

Einige Informationelle und Prozess-PEPs können auch den Status "Active" haben, wenn sie niemals abgeschlossen werden sollen. Z. B. PEP 1 (dieses PEP).

PEP-Pflege

Im Allgemeinen werden PEPs nach Erreichen des Status "Accepted", "Final", "Rejected" oder "Superseded" nicht mehr wesentlich modifiziert. Sobald eine Entscheidung getroffen ist, wird ein PEP als historisches Dokument und nicht als lebende Spezifikation betrachtet. Formale Dokumentation des erwarteten Verhaltens sollte an anderer Stelle gepflegt werden, z. B. in der Language Reference für Kernfeatures, der Library Reference für Standardbibliotheksmodule oder den PyPA Specifications für Packaging.

Wenn Änderungen, die auf Implementierungserfahrung und Benutzerfeedback basieren, an Standards Track PEPs im Provisional- oder (mit SC-Zustimmung) Accepted-Status vorgenommen werden, sollten sie im PEP vermerkt werden, damit das PEP die Implementierung an dem Punkt korrekt beschreibt, an dem es als Final markiert wird.

Aktive (Informational und Process) PEPs können im Laufe der Zeit aktualisiert werden, um Änderungen an Entwicklungspraktiken und anderen Details widerzuspiegeln. Der genaue Prozess, der in diesen Fällen befolgt wird, hängt von der Art und dem Zweck des betreffenden PEPs ab.

Gelegentlich kann ein zurückgestelltes oder sogar ein zurückgezogenes PEP mit größeren Aktualisierungen wiederbelebt werden, aber es ist oft besser, einfach ein neues vorzuschlagen.

Was gehört in ein erfolgreiches PEP?

Jedes PEP sollte die folgenden Teile/Abschnitte haben

  1. Präambel – RFC 2822-Style-Header mit Metadaten über das PEP, einschließlich der PEP-Nummer, eines kurzen beschreibenden Titels (begrenzt auf maximal 44 Zeichen), der Namen und optional der Kontaktdaten jedes Autors usw.
  2. Abstract – Eine kurze Beschreibung (~200 Wörter) des technischen Problems, das behandelt wird.
  3. Motivation – Die Motivation ist entscheidend für PEPs, die die Python-Sprache, die Bibliothek oder das Ökosystem ändern möchten. Sie sollte klar erklären, warum die bestehende Sprachspezifikation unzureichend ist, um das Problem zu lösen, das das PEP adressiert. Dies kann die Sammlung dokumentierter Unterstützung für das PEP von wichtigen Projekten im Python-Ökosystem umfassen. PEP-Einreichungen ohne ausreichende Motivation können abgelehnt werden.
  4. Begründung – Die Begründung vertieft die Spezifikation, indem sie beschreibt, warum bestimmte Designentscheidungen getroffen wurden. Sie sollte alternative Designs beschreiben, die in Betracht gezogen wurden, und verwandte Arbeiten, z. B. wie das Feature in anderen Sprachen unterstützt wird.

    Die Begründung sollte Beweise für den Konsens innerhalb der Community liefern und wichtige Einwände oder Bedenken diskutieren, die während der Diskussion aufkamen.

  5. Spezifikation – Die technische Spezifikation sollte die Syntax und Semantik jedes neuen Sprachfeatures beschreiben. Die Spezifikation sollte detailliert genug sein, um konkurrierende, interoperable Implementierungen für zumindest die aktuellen großen Python-Plattformen (CPython, Jython, IronPython, PyPy) zu ermöglichen.
  6. Abwärtskompatibilität – Alle PEPs, die Rückwärtsinkompatibilitäten einführen, müssen einen Abschnitt enthalten, der diese Inkompatibilitäten und deren Schweregrad beschreibt. Das PEP muss erklären, wie der Autor diese Inkompatibilitäten zu behandeln vorschlägt. PEP-Einreichungen ohne eine ausreichende Abwärtskompatibilitäts-Abhandlung können direkt abgelehnt werden.
  7. Sicherheitsimplikationen – Wenn es sicherheitsrelevante Bedenken im Zusammenhang mit dem PEP gibt, sollten diese Bedenken explizit aufgeschrieben werden, um sicherzustellen, dass die Gutachter des PEPs sich dessen bewusst sind.
  8. Wie man das lehrt – Für ein PEP, das neue Funktionalität hinzufügt oder das Sprachverhalten ändert, ist es hilfreich, einen Abschnitt darüber aufzunehmen, wie man Benutzern, neuen und erfahrenen, beibringt, wie sie das PEP auf ihre Arbeit anwenden können.

    Dieser Abschnitt kann Kernpunkte und empfohlene Dokumentationsänderungen enthalten, die den Benutzern helfen würden, ein neues Feature zu übernehmen oder ihren Code zu migrieren, um eine Sprachänderung zu verwenden.

  9. Referenzimplementierung – Die Referenzimplementierung muss abgeschlossen sein, bevor ein PEP den Status "Final" erhält, aber sie muss nicht vor der Annahme des PEPs abgeschlossen sein. Obwohl die Herangehensweise, Konsens über Spezifikation und Begründung zu erzielen, bevor Code geschrieben wird, von Vorteil ist, ist das Prinzip "grober Konsens und laufender Code" immer noch nützlich, wenn es um die Lösung vieler Diskussionen über API-Details geht.

    Die endgültige Implementierung muss Testcode und Dokumentation enthalten, die entweder für die Python-Sprachreferenz oder für die Standardbibliotheksreferenz geeignet sind.

  10. Abgelehnte Ideen – Während der Diskussion eines PEPs werden verschiedene Ideen vorgeschlagen, die nicht angenommen werden. Diese abgelehnten Ideen sollten zusammen mit den Gründen für ihre Ablehnung aufgezeichnet werden. Dies hilft sowohl bei der Aufzeichnung des Denkprozesses hinter der endgültigen Version des PEPs als auch bei der Verhinderung, dass Personen dieselbe abgelehnte Idee in späteren Diskussionen erneut aufwerfen.

    In gewisser Weise kann dieser Abschnitt als ein separater Abschnitt des Begründungsabschnitts betrachtet werden, der sich speziell damit beschäftigt, warum bestimmte Ideen nicht letztendlich verfolgt wurden.

  11. Offene Punkte – Während sich ein PEP im Entwurfsstadium befindet, können Ideen aufkommen, die weitere Diskussionen erfordern. Diese Ideen sollten aufgezeichnet werden, damit die Leute wissen, dass sie bedacht werden, aber noch keine konkrete Lösung haben. Dies hilft sicherzustellen, dass alle notwendigen Punkte für die Bereitschaft des PEPs zur Prüfung abgeschlossen sind und reduziert die duplizierte vorherige Diskussion.
  12. Danksagungen – Nützlich, um Personen zu danken und anzuerkennen, die bei der Entwicklung, Diskussion oder Ausarbeitung des PEP geholfen haben, oder zu jedem anderen Zweck. Der Abschnitt kann verwendet werden, um Mitwirkende an der Arbeit anzuerkennen, die keine Koautoren sind.
  13. Fußnoten – Eine Sammlung von Fußnoten, auf die im PEP verwiesen wird, und ein Ort, um nicht-inline Hyperlink-Ziele aufzuführen.
  14. Copyright/Lizenz – Jeder neue PEP muss unter einer doppelten Lizenz von Public Domain und CC0-1.0-Universal stehen (siehe diesen PEP als Beispiel).

PEP-Formate und -Vorlagen

PEPs sind UTF-8-kodierte Textdateien im reStructuredText-Format. reStructuredText ermöglicht eine reichhaltige Auszeichnung, die immer noch recht einfach zu lesen ist, aber auch gut aussehendes und funktionales HTML ergibt. PEP 12 enthält Anweisungen und eine PEP-Vorlage.

Die PEP-Textdateien werden automatisch in HTML konvertiert (über ein Sphinx-basiertes Build-System) für eine einfachere Online-Lesung.

PEP-Header-Präambel

Jeder PEP muss mit einer Präambel im RFC 2822-Stil beginnen. Die Kopfzeilen müssen in der folgenden Reihenfolge erscheinen. Mit "*" gekennzeichnete Kopfzeilen sind optional und werden unten beschrieben. Alle anderen Kopfzeilen sind erforderlich.

  PEP: <pep number>
  Title: <pep title>
  Author: <list of authors' names and optionally, email addrs>
* Sponsor: <name of sponsor>
* PEP-Delegate: <PEP delegate's name>
  Discussions-To: <URL of current canonical discussion thread>
  Status: <Draft | Active | Accepted | Provisional | Deferred | Rejected |
           Withdrawn | Final | Superseded>
  Type: <Standards Track | Informational | Process>
* Topic: <Governance | Packaging | Release | Typing>
* Requires: <pep numbers>
  Created: <date created on, in dd-mmm-yyyy format>
* Python-Version: <version number>
  Post-History: <dates, in dd-mmm-yyyy format,
                 inline-linked to PEP discussion threads>
* Replaces: <pep number>
* Superseded-By: <pep number>
* Resolution: <date in dd-mmm-yyyy format, linked to the acceptance/rejection post>

Die Kopfzeile "Author" listet die Namen und optional die E-Mail-Adressen aller Autoren/Besitzer des PEP auf. Das Format der Werte der "Author"-Kopfzeile muss sein

Random J. User <random@example.com>

wenn die E-Mail-Adresse enthalten ist, und nur

Random J. User

wenn die Adresse nicht angegeben ist. Die meisten PEP-Autoren verwenden ihren echten Namen, aber wenn Sie einen anderen Namen bevorzugen und diesen konsequent in Diskussionen im Zusammenhang mit dem PEP verwenden, können Sie ihn hier gerne verwenden.

Wenn es mehrere Autoren gibt, sollte jeder auf einer separaten Zeile gemäß den RFC 2822-Fortsetzungszeilenkonventionen aufgeführt werden. Beachten Sie, dass persönliche E-Mail-Adressen in PEPs zum Schutz vor Spam-Harvesting verschleiert werden.

Das Feld "Sponsor" erfasst, welcher Entwickler (Core-Entwickler oder anderweitig vom Steering Council genehmigt) den PEP sponsert. Wenn einer der Autoren des PEP ein Core-Entwickler ist, ist kein Sponsor erforderlich, und dieses Feld sollte daher weggelassen werden.

Das Feld "PEP-Delegate" wird verwendet, um die vom Steering Council ernannte Person zu erfassen, die die endgültige Entscheidung über die Genehmigung oder Ablehnung eines PEP trifft.

Hinweis: Die Kopfzeile "Resolution" ist nur für PEPs auf dem Standards-Track erforderlich. Sie enthält eine URL, die auf eine E-Mail-Nachricht oder eine andere Web-Ressource verweisen sollte, in der die Entscheidung über den PEP (d. h. Genehmigung oder Ablehnung) getroffen wird.

Die Kopfzeile "Discussions-To" gibt die URL zum aktuellen kanonischen Diskussions-Thread für den PEP an. Bei E-Mail-Listen sollte dies ein direkter Link zum Thread im Archiv der Liste sein und nicht nur ein mailto:-Link oder ein Hyperlink zur Liste selbst.

Die Kopfzeile "Type" gibt die Art des PEP an: Standards Track, Informational oder Process.

Die optionale Kopfzeile "Topic" listet das spezielle Thema auf, falls vorhanden, zu dem der PEP gehört. Siehe den Themenindex für die vorhandenen Themen.

Die Kopfzeile "Created" erfasst das Datum, an dem dem PEP eine Nummer zugewiesen wurde, während "Post-History" verwendet wird, um die Daten und entsprechenden URLs der Diskussions-Threads für den PEP zu erfassen, wobei erstere als verlinkter Text und letztere als Linkziel dienen. Beide Datumsangaben sollten im Format dd-mmm-yyyy erfolgen, z. B. 14-Aug-2001.

PEP auf dem Standards-Track haben typischerweise eine Kopfzeile "Python-Version", die die Python-Version angibt, mit der das Feature veröffentlicht wird. PEPs auf dem Standards-Track ohne eine Kopfzeile "Python-Version" geben Interoperabilitätsstandards an, die zunächst durch externe Bibliotheken und Tools unterstützt werden und dann möglicherweise durch einen späteren PEP ergänzt werden, um die Unterstützung für die Standardbibliothek hinzuzufügen. Informational- und Process-PEPs benötigen keine Kopfzeile "Python-Version".

PEPs können eine Kopfzeile "Requires" haben, die die PEP-Nummern angibt, von denen dieser PEP abhängt.

PEPs können auch eine Kopfzeile "Superseded-By" haben, die angibt, dass ein PEP durch ein späteres Dokument obsolet geworden ist; der Wert ist die Nummer des PEP, der das aktuelle Dokument ersetzt. Der neuere PEP muss eine Kopfzeile "Replaces" haben, die die Nummer des PEP enthält, den er obsolet gemacht hat.

Hilfsdateien

PEPs können Hilfsdateien wie Diagramme enthalten. Solche Dateien sollten benannt werden pep-XXXX-Y.ext, wobei "XXXX" die PEP-Nummer ist, "Y" eine fortlaufende Nummer (beginnend bei 1) und "ext" durch die tatsächliche Dateierweiterung (z. B. "png") ersetzt wird.

Alternativ können alle Support-Dateien in einem Unterverzeichnis namens pep-XXXX abgelegt werden, wobei "XXXX" die PEP-Nummer ist. Bei Verwendung eines Unterverzeichnisses gibt es keine Einschränkungen für die Dateinamen.

Änderung bestehender PEPs

Entwurfs-PEPs sind frei für Diskussionen und vorgeschlagene Änderungen zugänglich, nach Ermessen der Autoren, bis sie dem Steering Council oder PEP-Delegate zur Überprüfung und Entscheidung vorgelegt werden. Wesentliche Inhaltsänderungen sollten im Allgemeinen zuerst im Diskussions-Thread des PEP vorgeschlagen werden, der in seiner Discussions-To-Kopfzeile aufgeführt ist, während Korrekturen und Überarbeitungen als GitHub-Issue oder GitHub-Pull-Request eingereicht werden können. PEP-Autoren mit Schreibzugriff auf das PEP-Repository können die PEPs selbst aktualisieren, indem sie git push oder einen GitHub PR verwenden, um ihre Änderungen einzureichen. Anleitungen zum Ändern anderer PEPs finden Sie im Abschnitt PEP-Wartung.

Weitere Details finden Sie in der Anleitung zur Mitarbeit, und im Zweifelsfall wenden Sie sich bitte zuerst an den PEP-Autor und/oder einen PEP-Redakteur.

Übertragung des PEP-Eigentums

Gelegentlich wird es notwendig, die Eigentümerschaft von PEPs an einen neuen Champion zu übertragen. Im Allgemeinen ist es vorzuziehen, den ursprünglichen Autor als Co-Autor des übertragenen PEP beizubehalten, aber das liegt wirklich beim ursprünglichen Autor. Ein guter Grund für eine Eigentumsübertragung ist, dass der ursprüngliche Autor keine Zeit oder kein Interesse mehr hat, ihn zu aktualisieren oder den PEP-Prozess fortzuführen, oder dass er von der Bildfläche verschwunden ist (d. h. nicht erreichbar ist oder nicht auf E-Mails antwortet). Ein schlechter Grund für eine Eigentumsübertragung ist, dass der Autor mit der Richtung des PEP nicht einverstanden ist. Ein Ziel des PEP-Prozesses ist es, einen Konsens um einen PEP herum zu bilden, aber wenn das nicht möglich ist, kann ein Autor immer einen konkurrierenden PEP einreichen.

Wenn Sie daran interessiert sind, die Eigentümerschaft eines PEP zu übernehmen, können Sie dies auch über einen Pull-Request tun. Forken Sie das PEP-Repository, nehmen Sie Ihre Eigentumsänderung vor und reichen Sie einen Pull-Request ein. Sie sollten sowohl den ursprünglichen Autor als auch @python/pep-editors in einem Kommentar zum Pull-Request erwähnen. (Wenn der GitHub-Benutzername des ursprünglichen Autors unbekannt ist, verwenden Sie E-Mail.) Wenn der ursprüngliche Autor nicht rechtzeitig antwortet, treffen die PEP-Redakteure eine einseitige Entscheidung (es ist nicht so, dass solche Entscheidungen nicht rückgängig gemacht werden können :).

Verantwortlichkeiten und Workflow von PEP-Editoren

Ein PEP-Redakteur muss zur Gruppe @python/pep-editors auf GitHub hinzugefügt werden und das PEP-Repository beobachten.

Beachten Sie, dass Entwickler mit Schreibzugriff auf das PEP-Repository die Aufgaben erledigen können, die normalerweise von den PEP-Redakteuren übernommen werden. Alternativ können auch Entwickler um Unterstützung von PEP-Redakteuren bitten, indem sie @python/pep-editors auf GitHub erwähnen.

Für jeden neu eingehenden PEP tut ein Redakteur Folgendes:

  • Stellen Sie sicher, dass der PEP entweder von einem Core-Entwickler mitverfasst wurde, einen Core-Entwickler als Sponsor hat oder einen Sponsor hat, der speziell für diesen PEP vom Steering Council genehmigt wurde.
  • Lesen Sie den PEP, um zu prüfen, ob er bereit ist: fundiert und vollständig. Die Ideen müssen technisch Sinn ergeben, auch wenn sie unwahrscheinlich erscheinen, akzeptiert zu werden.
  • Der Titel sollte den Inhalt korrekt beschreiben.
  • Die Dateinamenerweiterung ist korrekt (d. h. .rst).
  • Stellen Sie sicher, dass jeder, der als Sponsor oder Co-Autor des PEP aufgeführt ist und Schreibzugriff auf das PEP-Repository hat, zu .github/CODEOWNERS hinzugefügt wird.
  • Überfliegen Sie den PEP auf offensichtliche Mängel in Sprache (Rechtschreibung, Grammatik, Satzbau usw.) und Code-Stil (Beispiele sollten PEP 7 & PEP 8 entsprechen). Redakteure können Probleme selbst beheben, sind aber nicht dazu verpflichtet (reStructuredText-Syntax wird vom CI des Repos überprüft).
  • Wenn ein Projekt als vorteilhaft für oder unterstützend des PEP dargestellt wird, stellen Sie sicher, dass eine direkte Bestätigung des Projekts vorliegt, um die Unterstützung klarzumachen. Dies dient dazu, zu verhindern, dass ein PEP versehentlich ein Projekt als unterstützend darstellt, wenn die Unterstützung tatsächlich auf Vermutungen beruht.

Wenn der PEP nicht bereit ist, wird ein Redakteur ihn mit spezifischen Anweisungen an den Autor zur Überarbeitung zurücksenden. Wenn die reST-Formatierung ein Problem darstellt, bitten Sie den Autor(en), PEP 12 als Vorlage zu verwenden und erneut einzureichen.

Sobald der PEP für das Repository bereit ist, wird ein PEP-Redakteur Folgendes tun:

  • Prüfen Sie, ob der Autor eine gültige PEP-Nummer ausgewählt hat oder weisen Sie ihm eine Nummer zu, falls nicht (fast immer nur die nächste verfügbare Nummer, aber manchmal ist es eine spezielle/Witz-Nummer, wie 666 oder 3141).

    Denken Sie daran, dass Nummern unter 100 Meta-PEPs sind.

  • Stellen Sie sicher, dass der Autor den Typ des PEP korrekt bezeichnet hat ("Standards Track", "Informational" oder "Process") und seinen Status als "Draft" markiert hat.
  • Stellen Sie sicher, dass alle CI-Build- und Lint-Checks ohne Fehler bestanden werden und keine offensichtlichen Probleme in der gerenderten Vorschauausgabe vorhanden sind.
  • Führen Sie den neuen (oder aktualisierten) PEP zusammen.
  • Informieren Sie den Autor über die nächsten Schritte (öffnen Sie einen Diskussions-Thread und aktualisieren Sie den PEP damit, kündigen Sie eine Ankündigung an usw.).

Aktualisierungen bestehender PEPs sollten als GitHub-Pull-Request eingereicht werden.

Viele PEPs werden von Entwicklern mit Schreibzugriff auf die Python-Codebasis geschrieben und gepflegt. Die PEP-Redakteure überwachen das PEP-Repository auf Änderungen und korrigieren alle Struktur-, Grammatik-, Rechtschreib- oder Markup-Fehler, die sie feststellen.

PEP-Redakteure beurteilen PEPs nicht. Sie erledigen lediglich den administrativen und redaktionellen Teil (was in der Regel eine Aufgabe mit geringem Volumen ist).

Ressourcen


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

Zuletzt geändert: 2025-08-09 01:23:33 GMT