2000-07-13 02:33:08 -04:00
|
|
|
PEP: 1
|
2000-07-25 13:59:08 -04:00
|
|
|
Title: PEP Purpose and Guidelines
|
2012-05-05 08:56:57 -04:00
|
|
|
Author: Barry Warsaw, Jeremy Hylton, David Goodger, Nick Coghlan
|
2001-03-21 16:52:08 -05:00
|
|
|
Status: Active
|
2005-08-12 21:37:32 -04:00
|
|
|
Type: Process
|
2003-05-03 12:01:32 -04:00
|
|
|
Content-Type: text/x-rst
|
2000-07-25 13:59:08 -04:00
|
|
|
Created: 13-Jun-2000
|
2013-04-07 04:26:06 -04:00
|
|
|
Post-History: 21-Mar-2001, 29-Jul-2002, 03-May-2003, 05-May-2012,
|
|
|
|
07-Apr-2013
|
2000-07-25 13:59:08 -04:00
|
|
|
|
|
|
|
|
|
|
|
What is a PEP?
|
2003-05-03 12:01:32 -04:00
|
|
|
==============
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
PEP stands for Python Enhancement Proposal. A PEP is a design
|
|
|
|
document providing information to the Python community, or describing
|
2005-08-12 21:37:32 -04:00
|
|
|
a new feature for Python or its processes or environment. The PEP
|
|
|
|
should provide a concise technical specification of the feature and a
|
|
|
|
rationale for the feature.
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2012-05-06 01:36:37 -04:00
|
|
|
We intend PEPs to be the primary mechanisms for proposing major new
|
2003-05-03 12:01:32 -04:00
|
|
|
features, for collecting community input on an issue, and for
|
|
|
|
documenting the design decisions that have gone into Python. The PEP
|
|
|
|
author is responsible for building consensus within the community and
|
|
|
|
documenting dissenting opinions.
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2006-03-23 22:24:04 -05:00
|
|
|
Because the PEPs are maintained as text files in a versioned
|
|
|
|
repository, their revision history is the historical record of the
|
|
|
|
feature proposal [1]_.
|
2002-08-26 12:19:25 -04:00
|
|
|
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2005-08-12 21:37:32 -04:00
|
|
|
PEP Types
|
|
|
|
=========
|
|
|
|
|
|
|
|
There are three kinds of PEP:
|
|
|
|
|
|
|
|
1. A **Standards Track** PEP describes a new feature or implementation
|
2013-04-07 04:26:06 -04:00
|
|
|
for Python. It may also describe an interoperability standard that will
|
|
|
|
be supported outside the standard library for current Python versions
|
|
|
|
before a subsequent PEP adds standard library support in a future
|
|
|
|
version.
|
2005-08-12 21:37:32 -04:00
|
|
|
|
|
|
|
2. An **Informational** PEP describes a Python design issue, or
|
|
|
|
provides general guidelines or information to the Python community,
|
|
|
|
but does not propose a new feature. Informational PEPs do not
|
|
|
|
necessarily represent a Python community consensus or
|
2012-05-17 06:53:13 -04:00
|
|
|
recommendation, so users and implementers are free to ignore
|
2005-08-12 21:37:32 -04:00
|
|
|
Informational PEPs or follow their advice.
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2005-08-12 21:37:32 -04:00
|
|
|
3. A **Process** PEP describes a process surrounding Python, or
|
|
|
|
proposes a change to (or an event in) a process. Process PEPs are
|
|
|
|
like Standards Track PEPs but apply to areas other than the Python
|
|
|
|
language itself. They may propose an implementation, but not to
|
|
|
|
Python's codebase; they often require community consensus; unlike
|
|
|
|
Informational PEPs, they are more than recommendations, and users
|
2009-02-08 18:06:43 -05:00
|
|
|
are typically not free to ignore them. Examples include
|
|
|
|
procedures, guidelines, changes to the decision-making process, and
|
|
|
|
changes to the tools or environment used in Python development.
|
|
|
|
Any meta-PEP is also considered a Process PEP.
|
2000-07-25 13:59:08 -04:00
|
|
|
|
|
|
|
|
2012-12-22 06:30:14 -05:00
|
|
|
PEP Workflow
|
|
|
|
============
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2012-05-06 01:36:37 -04:00
|
|
|
|
|
|
|
Python's BDFL
|
|
|
|
-------------
|
|
|
|
|
2017-01-16 12:25:59 -05:00
|
|
|
There are several references in this PEP to the "BDFL". This acronym stands
|
2012-05-06 01:36:37 -04:00
|
|
|
for "Benevolent Dictator for Life" and refers to Guido van Rossum, the
|
|
|
|
original creator of, and the final design authority for, the Python
|
|
|
|
programming language.
|
|
|
|
|
|
|
|
|
2012-12-22 06:30:14 -05:00
|
|
|
PEP Editors
|
|
|
|
-----------
|
|
|
|
|
|
|
|
The PEP editors are individuals responsible for managing the administrative
|
|
|
|
and editorial aspects of the PEP workflow (e.g. assigning PEP numbers and
|
|
|
|
changing their status). See `PEP Editor Responsibilities & Workflow`_ for
|
|
|
|
details. The current editors are:
|
|
|
|
|
2015-02-02 08:37:11 -05:00
|
|
|
* Chris Angelico
|
2012-12-22 06:30:14 -05:00
|
|
|
* Anthony Baxter
|
|
|
|
* Georg Brandl
|
|
|
|
* Brett Cannon
|
|
|
|
* David Goodger
|
2018-01-29 10:15:54 -05:00
|
|
|
* \R. David Murray
|
2012-12-22 06:30:14 -05:00
|
|
|
* Jesse Noller
|
2015-02-02 08:37:11 -05:00
|
|
|
* Berker Peksag
|
2012-12-22 06:30:14 -05:00
|
|
|
* Guido van Rossum
|
|
|
|
* Barry Warsaw
|
|
|
|
|
2016-10-15 00:38:43 -04:00
|
|
|
PEP editorship is by invitation of the current editors, and they can be
|
|
|
|
contacted via the address <peps@python.org>, but you may only need to use this
|
|
|
|
to contact the editors semi-privately. All of the PEP workflow can be
|
|
|
|
conducted via the GitHub `PEP repository`_ issues and pull requests.
|
2012-12-22 06:30:14 -05:00
|
|
|
|
|
|
|
|
2016-10-15 00:38:43 -04:00
|
|
|
Start with an idea for Python
|
|
|
|
-----------------------------
|
2012-05-05 08:56:57 -04:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
The PEP process begins with a new idea for Python. It is highly
|
|
|
|
recommended that a single PEP contain a single key proposal or new
|
2010-03-04 22:07:12 -05:00
|
|
|
idea. Small enhancements or patches often don't need
|
2012-12-22 06:30:14 -05:00
|
|
|
a PEP and can be injected into the Python development workflow with a
|
2012-05-17 06:53:13 -04:00
|
|
|
patch submission to the Python `issue tracker`_. The more focused the
|
2012-12-22 06:30:14 -05:00
|
|
|
PEP, the more successful it tends to be. The PEP editors reserve the
|
2012-05-17 06:53:13 -04:00
|
|
|
right to reject PEP proposals if they appear too unfocused or too
|
|
|
|
broad. If in doubt, split your PEP into several well-focused ones.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2016-10-15 00:38:43 -04:00
|
|
|
Each PEP must have a champion -- someone who writes the PEP using the style
|
|
|
|
and format described below, shepherds the discussions in the appropriate
|
|
|
|
forums, and attempts to build community consensus around the idea. The PEP
|
|
|
|
champion (a.k.a. Author) should first attempt to ascertain whether the idea is
|
|
|
|
PEP-able. Posting to the comp.lang.python newsgroup
|
|
|
|
(a.k.a. python-list@python.org mailing list) or the python-ideas@python.org
|
|
|
|
mailing list is the best way to go about this.
|
2010-03-04 22:07:12 -05:00
|
|
|
|
|
|
|
Vetting an idea publicly before going as far as writing a PEP is meant
|
|
|
|
to save the potential author time. Many ideas have been brought
|
|
|
|
forward for changing Python that have been rejected for various
|
|
|
|
reasons. Asking the Python community first if an idea is original
|
|
|
|
helps prevent too much time being spent on something that is
|
|
|
|
guaranteed to be rejected based on prior discussions (searching
|
|
|
|
the internet does not always do the trick). It also helps to make sure
|
|
|
|
the idea is applicable to the entire community and not just the author.
|
|
|
|
Just because an idea sounds good to the author does not
|
|
|
|
mean it will work for most people in most areas where Python is used.
|
|
|
|
|
|
|
|
Once the champion has asked the Python community as to whether an
|
|
|
|
idea has any chance of acceptance, a draft PEP should be presented to
|
|
|
|
python-ideas. This gives the author a chance to flesh out the draft
|
|
|
|
PEP to make properly formatted, of high quality, and to address
|
|
|
|
initial concerns about the proposal.
|
|
|
|
|
2016-10-15 00:38:43 -04:00
|
|
|
|
|
|
|
Submitting a PEP
|
|
|
|
----------------
|
|
|
|
|
|
|
|
Following a discussion on python-ideas, the proposal should be submitted as a
|
|
|
|
draft PEP via a `GitHub pull request`_. The draft must be written in PEP
|
|
|
|
style as described below, else it will fail review immediately (although minor
|
|
|
|
errors may be corrected by the editors).
|
|
|
|
|
|
|
|
The standard PEP workflow is:
|
|
|
|
|
|
|
|
* You, the PEP author, fork the `PEP repository`_, and create a file named
|
2017-04-12 13:27:15 -04:00
|
|
|
``pep-9999.rst`` that contains your new PEP. Use "9999" as your draft PEP
|
2016-10-15 00:38:43 -04:00
|
|
|
number.
|
|
|
|
* Push this to your GitHub fork and submit a pull request.
|
|
|
|
* The PEP editors review your PR for structure, formatting, and other errors.
|
|
|
|
* Once approved, they will assign your PEP a number, and label it as Standards
|
|
|
|
Track, Informational, or Process, and give it the status "Draft"
|
|
|
|
|
|
|
|
Once the review process is complete, and the PEP editors approve it (note that
|
|
|
|
this is *not* the same as accepting your PEP!), they will squash commit your
|
|
|
|
pull request onto master.
|
|
|
|
|
|
|
|
The PEP editors will not unreasonably deny a PEP. Reasons for denying PEP
|
|
|
|
status include duplication of effort, being technically unsound, not providing
|
|
|
|
proper motivation or addressing backwards compatibility, or not in keeping
|
|
|
|
with the Python philosophy. The BDFL can be consulted during the approval
|
|
|
|
phase, and is the final arbiter of the draft's PEP-ability.
|
|
|
|
|
|
|
|
Developers with git push privileges for the `PEP repository`_ may claim PEP
|
|
|
|
numbers directly by creating and committing a new PEP. When doing so, the
|
|
|
|
developer must handle the tasks that would normally be taken care of by the
|
|
|
|
PEP editors (see `PEP Editor Responsibilities & Workflow`_). This includes
|
|
|
|
ensuring the initial version meets the expected standards for submitting a
|
|
|
|
PEP. Alternately, even developers may choose to submit PEPs via pull request.
|
|
|
|
When doing so, let the PEP editors know you have git push privileges and they
|
|
|
|
can guide you through the process of updating the PEP repository directly.
|
2012-05-05 08:56:57 -04:00
|
|
|
|
2012-12-22 06:30:14 -05:00
|
|
|
As updates are necessary, the PEP author can check in new versions if they
|
2016-10-15 00:38:43 -04:00
|
|
|
(or a collaborating developer) have git push privileges.
|
2012-12-22 06:30:14 -05:00
|
|
|
|
|
|
|
After a PEP number has been assigned, a draft PEP may be discussed further on
|
|
|
|
python-ideas (getting a PEP number assigned early can be useful for ease of
|
|
|
|
reference, especially when multiple draft PEPs are being considered at the
|
|
|
|
same time). Eventually, all Standards Track PEPs must be sent to the
|
|
|
|
`python-dev list <mailto:python-dev@python.org>`__ for review as described
|
|
|
|
in the next section.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2005-08-12 21:37:32 -04:00
|
|
|
Standards Track PEPs consist of two parts, a design document and a
|
2012-12-22 06:30:14 -05:00
|
|
|
reference implementation. It is generally recommended that at least a
|
|
|
|
prototype implementation be co-developed with the PEP, as ideas that sound
|
|
|
|
good in principle sometimes turn out to be impractical when subjected to the
|
|
|
|
test of implementation.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
|
|
|
PEP authors are responsible for collecting community feedback on a PEP
|
2010-03-04 22:07:12 -05:00
|
|
|
before submitting it for review. However, wherever possible, long
|
|
|
|
open-ended discussions on public mailing lists should be avoided.
|
2012-12-22 06:30:14 -05:00
|
|
|
Strategies to keep the discussions efficient include: setting up a
|
2011-10-06 10:38:55 -04:00
|
|
|
separate SIG mailing list for the topic, having the PEP author accept
|
|
|
|
private comments in the early design phases, setting up a wiki page, etc.
|
|
|
|
PEP authors should use their discretion here.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2012-05-06 01:36:37 -04:00
|
|
|
|
2012-05-05 08:56:57 -04:00
|
|
|
PEP Review & Resolution
|
|
|
|
-----------------------
|
|
|
|
|
2012-05-18 10:08:09 -04:00
|
|
|
Once the authors have completed a PEP, they may request a review for
|
|
|
|
style and consistency from the PEP editors. However, the content and
|
|
|
|
final acceptance of the PEP must be requested of the BDFL, usually via
|
|
|
|
an email to the python-dev mailing list. PEPs are reviewed by the
|
|
|
|
BDFL and his chosen consultants, who may accept or reject a PEP or
|
|
|
|
send it back to the author(s) for revision. For a PEP that is
|
|
|
|
predetermined to be acceptable (e.g., it is an obvious win as-is
|
|
|
|
and/or its implementation has already been checked in) the BDFL may
|
|
|
|
also initiate a PEP review, first notifying the PEP author(s) and
|
|
|
|
giving them a chance to make revisions.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2012-05-05 08:56:57 -04:00
|
|
|
The final authority for PEP approval is the BDFL. However, whenever a new
|
|
|
|
PEP is put forward, any core developer that believes they are suitably
|
|
|
|
experienced to make the final decision on that PEP may offer to serve as
|
2012-05-06 01:36:37 -04:00
|
|
|
the BDFL's delegate (or "PEP czar") for that PEP. If their self-nomination
|
|
|
|
is accepted by the other core developers and the BDFL, then they will have
|
|
|
|
the authority to approve (or reject) that PEP. This process happens most
|
|
|
|
frequently with PEPs where the BDFL has granted in principle approval for
|
|
|
|
*something* to be done, but there are details that need to be worked out
|
|
|
|
before the PEP can be accepted.
|
|
|
|
|
|
|
|
If the final decision on a PEP is to be made by a delegate rather than
|
|
|
|
directly by the BDFL, this will be recorded by including the
|
|
|
|
"BDFL-Delegate" header in the PEP.
|
2012-05-05 08:56:57 -04:00
|
|
|
|
2013-04-07 04:26:06 -04:00
|
|
|
PEP review and resolution may also occur on a list other than python-dev
|
|
|
|
(for example, distutils-sig for packaging related PEPs that don't
|
|
|
|
immediately affect the standard library). In this case, the "Discussions-To"
|
|
|
|
heading in the PEP will identify the appropriate alternative list where
|
|
|
|
discussion, review and pronouncement on the PEP will occur.
|
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
For a PEP to be accepted it must meet certain minimum criteria. It
|
|
|
|
must be a clear and complete description of the proposed enhancement.
|
|
|
|
The enhancement must represent a net improvement. The proposed
|
|
|
|
implementation, if applicable, must be solid and must not complicate
|
|
|
|
the interpreter unduly. Finally, a proposed enhancement must be
|
|
|
|
"pythonic" in order to be accepted by the BDFL. (However, "pythonic"
|
|
|
|
is an imprecise term; it may be defined as whatever is acceptable to
|
|
|
|
the BDFL. This logic is intentionally circular.) See PEP 2 [2]_ for
|
|
|
|
standard library module acceptance criteria.
|
|
|
|
|
|
|
|
Once a PEP has been accepted, the reference implementation must be
|
2012-05-05 08:56:57 -04:00
|
|
|
completed. When the reference implementation is complete and incorporated
|
|
|
|
into the main source code repository, the status will be changed to "Final".
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2018-07-07 21:50:57 -04:00
|
|
|
To allow gathering of additional design and interface feedback before committing
|
|
|
|
to long term stability for a language feature or standard library API, a PEP
|
|
|
|
may also be marked as "Provisional". This is short for "Provisionally Accepted",
|
|
|
|
and indicates that the proposal has been accepted for inclusion in the reference
|
|
|
|
implementation, but additional user feedback is needed before the full design
|
|
|
|
can be considered "Final". Unlike regular accepted PEPs, provisionally accepted
|
|
|
|
PEPs may still be Rejected or Withdrawn *even after the related changes have
|
|
|
|
been included in a Python release*.
|
|
|
|
|
|
|
|
Wherever possible, it is considered preferable to reduce the scope of a proposal
|
|
|
|
to avoid the need to rely on the "Provisional" status (e.g. by deferring some
|
|
|
|
features to later PEPs), as this status can lead to version compatibility
|
|
|
|
challenges in the wider Python ecosystem. PEP 411 provides additional details
|
|
|
|
on potential use cases for the Provisional status.
|
|
|
|
|
|
|
|
A PEP can also be assigned the status "Deferred". The PEP author or an
|
2003-05-03 12:01:32 -04:00
|
|
|
editor can assign the PEP this status when no progress is being made
|
2012-12-22 06:30:14 -05:00
|
|
|
on the PEP. Once a PEP is deferred, a PEP editor can re-assign it
|
2003-05-03 12:01:32 -04:00
|
|
|
to draft status.
|
|
|
|
|
|
|
|
A PEP can also be "Rejected". Perhaps after all is said and done it
|
|
|
|
was not a good idea. It is still important to have a record of this
|
2012-05-05 08:56:57 -04:00
|
|
|
fact. The "Withdrawn" status is similar - it means that the PEP author
|
|
|
|
themselves has decided that the PEP is actually a bad idea, or has
|
|
|
|
accepted that a competing proposal is a better alternative.
|
|
|
|
|
|
|
|
When a PEP is Accepted, Rejected or Withdrawn, the PEP should be updated
|
|
|
|
accordingly. In addition to updating the status field, at the very least
|
|
|
|
the Resolution header should be added with a link to the relevant post
|
|
|
|
in the python-dev mailing list archives.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2011-03-04 00:03:26 -05:00
|
|
|
PEPs can also be superseded by a different PEP, rendering the original
|
2003-05-03 12:01:32 -04:00
|
|
|
obsolete. This is intended for Informational PEPs, where version 2 of
|
|
|
|
an API can replace version 1.
|
|
|
|
|
2007-05-01 11:20:01 -04:00
|
|
|
The possible paths of the status of PEPs are as follows:
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2018-07-08 03:20:08 -04:00
|
|
|
.. image:: pep-0001-process_flow.png
|
2018-07-07 23:16:54 -04:00
|
|
|
:alt: PEP process flow diagram
|
2018-07-07 21:50:57 -04:00
|
|
|
|
|
|
|
While not shown in the diagram, "Accepted" PEPs may technically move to
|
|
|
|
"Rejected" or "Withdrawn" even after acceptance. This will only occur if
|
|
|
|
the implementation process reveals fundamental flaws in the design that were
|
|
|
|
not noticed prior to acceptance of the PEP. Unlike Provisional PEPs, these
|
|
|
|
transitions are only permitted if the accepted proposal has *not* been included
|
|
|
|
in a Python release - released changes must instead go through the regular
|
|
|
|
deprecation process (which may require a new PEP providing the rationale for
|
|
|
|
the deprecation).
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2005-08-13 14:01:01 -04:00
|
|
|
Some Informational and Process PEPs may also have a status of "Active"
|
|
|
|
if they are never meant to be completed. E.g. PEP 1 (this PEP).
|
2000-08-07 22:30:55 -04:00
|
|
|
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2012-05-06 01:36:37 -04:00
|
|
|
PEP Maintenance
|
|
|
|
---------------
|
|
|
|
|
|
|
|
In general, Standards track PEPs are no longer modified after they have
|
|
|
|
reached the Final state. Once a PEP has been completed, the Language and
|
|
|
|
Standard Library References become the formal documentation of the expected
|
2012-05-17 06:53:13 -04:00
|
|
|
behavior.
|
2012-05-06 01:36:37 -04:00
|
|
|
|
2018-07-07 21:50:57 -04:00
|
|
|
If changes based on implementation experience and user feedback are made to
|
|
|
|
Standards track PEPs while in the Accepted or Provisional State, those changes
|
|
|
|
should be noted in the PEP, such that the PEP accurately describes the state of
|
|
|
|
the implementation at the point where it is marked Final.
|
|
|
|
|
2012-05-06 01:36:37 -04:00
|
|
|
Informational and Process PEPs may be updated over time to reflect changes
|
|
|
|
to development practices and other details. The precise process followed in
|
|
|
|
these cases will depend on the nature and purpose of the PEP being updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-07-25 13:59:08 -04:00
|
|
|
What belongs in a successful PEP?
|
2003-05-03 12:01:32 -04:00
|
|
|
=================================
|
|
|
|
|
|
|
|
Each PEP should have the following parts:
|
|
|
|
|
|
|
|
1. Preamble -- RFC 822 style headers containing meta-data about the
|
|
|
|
PEP, including the PEP number, a short descriptive title (limited
|
|
|
|
to a maximum of 44 characters), the names, and optionally the
|
|
|
|
contact info for each author, etc.
|
|
|
|
|
|
|
|
2. Abstract -- a short (~200 word) description of the technical issue
|
|
|
|
being addressed.
|
|
|
|
|
|
|
|
3. Copyright/public domain -- Each PEP must either be explicitly
|
2012-05-17 06:53:13 -04:00
|
|
|
labeled as placed in the public domain (see this PEP as an
|
2003-05-03 12:01:32 -04:00
|
|
|
example) or licensed under the `Open Publication License`_.
|
|
|
|
|
|
|
|
4. Specification -- The technical specification should describe the
|
|
|
|
syntax and semantics of any new language feature. The
|
|
|
|
specification should be detailed enough to allow competing,
|
2012-12-22 06:30:14 -05:00
|
|
|
interoperable implementations for at least the current major Python
|
|
|
|
platforms (CPython, Jython, IronPython, PyPy).
|
2003-05-03 12:01:32 -04:00
|
|
|
|
|
|
|
5. Motivation -- The motivation is critical for PEPs that want to
|
|
|
|
change the Python language. It should clearly explain why the
|
|
|
|
existing language specification is inadequate to address the
|
|
|
|
problem that the PEP solves. PEP submissions without sufficient
|
|
|
|
motivation may be rejected outright.
|
|
|
|
|
|
|
|
6. Rationale -- The rationale fleshes out the specification by
|
|
|
|
describing what motivated the design and why particular design
|
|
|
|
decisions were made. It should describe alternate designs that
|
|
|
|
were considered and related work, e.g. how the feature is supported
|
|
|
|
in other languages.
|
|
|
|
|
|
|
|
The rationale should provide evidence of consensus within the
|
|
|
|
community and discuss important objections or concerns raised
|
|
|
|
during discussion.
|
|
|
|
|
|
|
|
7. Backwards Compatibility -- All PEPs that introduce backwards
|
|
|
|
incompatibilities must include a section describing these
|
|
|
|
incompatibilities and their severity. The PEP must explain how the
|
|
|
|
author proposes to deal with these incompatibilities. PEP
|
|
|
|
submissions without a sufficient backwards compatibility treatise
|
|
|
|
may be rejected outright.
|
|
|
|
|
|
|
|
8. Reference Implementation -- The reference implementation must be
|
|
|
|
completed before any PEP is given status "Final", but it need not
|
2012-12-22 06:30:14 -05:00
|
|
|
be completed before the PEP is accepted. While there is merit
|
|
|
|
to the approach of reaching consensus on the specification and
|
|
|
|
rationale before writing code, the principle of "rough consensus
|
|
|
|
and running code" is still useful when it comes to resolving many
|
|
|
|
discussions of API details.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
|
|
|
The final implementation must include test code and documentation
|
|
|
|
appropriate for either the Python language reference or the
|
|
|
|
standard library reference.
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2018-05-16 14:08:31 -04:00
|
|
|
9. How to Teach This -- For a PEP that adds new functionality or changes
|
|
|
|
language behavior, it is helpful to include a section on how to
|
|
|
|
teach users, new and experienced, how to apply the PEP to their
|
|
|
|
work.
|
|
|
|
|
|
|
|
This section may include key points and recommended documentation
|
|
|
|
changes that would help users adopt a new feature or migrate their
|
2018-07-07 23:16:54 -04:00
|
|
|
code to use a language change.
|
2018-05-16 14:08:31 -04:00
|
|
|
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2002-08-26 12:19:25 -04:00
|
|
|
PEP Formats and Templates
|
2003-05-03 12:01:32 -04:00
|
|
|
=========================
|
2002-08-26 12:19:25 -04:00
|
|
|
|
2016-01-05 18:33:02 -05:00
|
|
|
PEPs are UTF-8 encoded text files using the reStructuredText_ format.
|
|
|
|
ReStructuredText_ allows for rich markup that is still quite easy to
|
|
|
|
read, but also results in good-looking and functional HTML. PEP 12
|
|
|
|
contains instructions and a template [4]_ for reStructuredText PEPs.
|
|
|
|
|
2018-04-27 04:21:50 -04:00
|
|
|
The PEP text files are automatically converted to HTML [5]_ for easier
|
|
|
|
`online reading <https://www.python.org/dev/peps/>`__.
|
2002-08-26 12:19:25 -04:00
|
|
|
|
|
|
|
|
|
|
|
PEP Header Preamble
|
2003-05-03 12:01:32 -04:00
|
|
|
===================
|
|
|
|
|
|
|
|
Each PEP must begin with an RFC 822 style header preamble. The headers
|
|
|
|
must appear in the following order. Headers marked with "*" are
|
|
|
|
optional and are described below. All other headers are required. ::
|
|
|
|
|
|
|
|
PEP: <pep number>
|
|
|
|
Title: <pep title>
|
|
|
|
Author: <list of authors' real names and optionally, email addrs>
|
2012-05-06 02:31:52 -04:00
|
|
|
* BDFL-Delegate: <PEP czar's real name>
|
2003-05-03 12:01:32 -04:00
|
|
|
* Discussions-To: <email address>
|
2018-07-07 21:50:57 -04:00
|
|
|
Status: <Draft | Active | Accepted | Provisional | Deferred | Rejected |
|
2011-03-03 23:58:22 -05:00
|
|
|
Withdrawn | Final | Superseded>
|
2005-08-12 21:37:32 -04:00
|
|
|
Type: <Standards Track | Informational | Process>
|
2016-10-14 06:33:28 -04:00
|
|
|
* Content-Type: <text/x-rst | text/plain>
|
2003-05-03 12:01:32 -04:00
|
|
|
* Requires: <pep numbers>
|
|
|
|
Created: <date created on, in dd-mmm-yyyy format>
|
|
|
|
* Python-Version: <version number>
|
2017-10-27 14:49:30 -04:00
|
|
|
Post-History: <dates of postings to python-ideas and/or python-dev>
|
2003-05-03 12:01:32 -04:00
|
|
|
* Replaces: <pep number>
|
2011-03-03 23:58:22 -05:00
|
|
|
* Superseded-By: <pep number>
|
2010-04-30 15:21:52 -04:00
|
|
|
* Resolution: <url>
|
2003-05-03 12:01:32 -04:00
|
|
|
|
|
|
|
The Author header lists the names, and optionally the email addresses
|
|
|
|
of all the authors/owners of the PEP. The format of the Author header
|
|
|
|
value must be
|
|
|
|
|
|
|
|
Random J. User <address@dom.ain>
|
|
|
|
|
|
|
|
if the email address is included, and just
|
|
|
|
|
|
|
|
Random J. User
|
|
|
|
|
|
|
|
if the address is not given. For historical reasons the format
|
|
|
|
"address@dom.ain (Random J. User)" may appear in a PEP, however new
|
|
|
|
PEPs must use the mandated format above, and it is acceptable to
|
|
|
|
change to this format when PEPs are updated.
|
|
|
|
|
|
|
|
If there are multiple authors, each should be on a separate line
|
|
|
|
following RFC 2822 continuation line conventions. Note that personal
|
|
|
|
email addresses in PEPs will be obscured as a defense against spam
|
|
|
|
harvesters.
|
|
|
|
|
2012-05-06 01:36:37 -04:00
|
|
|
The BDFL-Delegate field is used to record cases where the final decision to
|
2012-05-06 02:31:52 -04:00
|
|
|
approve or reject a PEP rests with someone other than the BDFL. (The
|
|
|
|
delegate's email address is currently omitted due to a limitation in the
|
|
|
|
email address masking for reStructuredText PEPs)
|
2012-05-06 01:36:37 -04:00
|
|
|
|
2010-04-30 15:21:52 -04:00
|
|
|
*Note: The Resolution header is required for Standards Track PEPs
|
|
|
|
only. It contains a URL that should point to an email message or
|
|
|
|
other web resource where the pronouncement about the PEP is made.*
|
|
|
|
|
2013-04-07 04:26:06 -04:00
|
|
|
For a PEP where final pronouncement will be made on a list other than
|
|
|
|
python-dev, a Discussions-To header will indicate the mailing list
|
|
|
|
or URL where the pronouncement will occur. A temporary Discussions-To header
|
|
|
|
may also be used when a draft PEP is being discussed prior to submission for
|
|
|
|
pronouncement. No Discussions-To header is necessary if the PEP is being
|
|
|
|
discussed privately with the author, or on the python-list, python-ideas
|
|
|
|
or python-dev mailing lists. Note that email addresses in the
|
|
|
|
Discussions-To header will not be obscured.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2005-08-12 21:37:32 -04:00
|
|
|
The Type header specifies the type of PEP: Standards Track,
|
|
|
|
Informational, or Process.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
|
|
|
The format of a PEP is specified with a Content-Type header. The
|
|
|
|
acceptable values are "text/plain" for plaintext PEPs (see PEP 9 [3]_)
|
|
|
|
and "text/x-rst" for reStructuredText PEPs (see PEP 12 [4]_).
|
2016-10-14 06:33:28 -04:00
|
|
|
reStructuredText is strongly preferred, but for backwards
|
|
|
|
compatibility plain text is currently still the default if no
|
|
|
|
Content-Type header is present.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
|
|
|
The Created header records the date that the PEP was assigned a
|
|
|
|
number, while Post-History is used to record the dates of when new
|
2017-10-27 14:49:30 -04:00
|
|
|
versions of the PEP are posted to python-ideas and/or python-dev. Both
|
2003-05-03 12:01:32 -04:00
|
|
|
headers should be in dd-mmm-yyyy format, e.g. 14-Aug-2001.
|
|
|
|
|
2013-04-07 04:26:06 -04:00
|
|
|
Standards Track PEPs will typically have a Python-Version header which
|
|
|
|
indicates the version of Python that the feature will be released with.
|
|
|
|
Standards Track PEPs without a Python-Version header indicate
|
|
|
|
interoperability standards that will initially be supported through
|
2018-04-21 02:42:53 -04:00
|
|
|
external libraries and tools, and then potentially supplemented by a later PEP
|
|
|
|
to add support to the standard library. Informational and Process PEPs do
|
2013-04-07 04:26:06 -04:00
|
|
|
not need a Python-Version header.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
|
|
|
PEPs may have a Requires header, indicating the PEP numbers that this
|
|
|
|
PEP depends on.
|
|
|
|
|
2011-03-03 23:58:22 -05:00
|
|
|
PEPs may also have a Superseded-By header indicating that a PEP has
|
|
|
|
been rendered obsolete by a later document; the value is the number of
|
|
|
|
the PEP that replaces the current document. The newer PEP must have a
|
2003-05-03 12:01:32 -04:00
|
|
|
Replaces header containing the number of the PEP that it rendered
|
|
|
|
obsolete.
|
2001-03-21 12:05:27 -05:00
|
|
|
|
2001-08-14 19:58:09 -04:00
|
|
|
|
2006-03-23 22:24:04 -05:00
|
|
|
Auxiliary Files
|
|
|
|
===============
|
|
|
|
|
2018-04-21 02:42:53 -04:00
|
|
|
PEPs may include auxiliary files such as diagrams. Such files should be
|
2006-03-23 22:24:04 -05:00
|
|
|
named ``pep-XXXX-Y.ext``, where "XXXX" is the PEP number, "Y" is a
|
|
|
|
serial number (starting at 1), and "ext" is replaced by the actual
|
|
|
|
file extension (e.g. "png").
|
|
|
|
|
2018-04-21 02:42:53 -04:00
|
|
|
Alternatively, all support files may be placed in a subdirectory called
|
|
|
|
``pep-XXXX``, where "XXXX" is the PEP number. When using a subdirectory, there
|
|
|
|
are no constraints on the names used in files.
|
|
|
|
|
2006-03-23 22:24:04 -05:00
|
|
|
|
2001-07-05 14:52:25 -04:00
|
|
|
Reporting PEP Bugs, or Submitting PEP Updates
|
2003-05-03 12:01:32 -04:00
|
|
|
=============================================
|
|
|
|
|
|
|
|
How you report a bug, or submit a PEP update depends on several
|
|
|
|
factors, such as the maturity of the PEP, the preferences of the PEP
|
|
|
|
author, and the nature of your comments. For the early draft stages
|
|
|
|
of the PEP, it's probably best to send your comments and changes
|
|
|
|
directly to the PEP author. For more mature, or finished PEPs you may
|
2018-04-21 02:42:53 -04:00
|
|
|
want to submit corrections as a `GitHub issue`_ or `GitHub pull request`_ so that
|
|
|
|
your changes don't get lost.
|
2001-07-05 14:52:25 -04:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
When in doubt about where to send your changes, please check first
|
2012-12-22 06:30:14 -05:00
|
|
|
with the PEP author and/or a PEP editor.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2016-06-26 01:33:12 -04:00
|
|
|
PEP authors with git push privileges for the PEP repository can update the
|
2018-04-21 02:42:53 -04:00
|
|
|
PEPs themselves by using "git push" or the GitHub PR interface to submit their
|
|
|
|
changes.
|
2001-11-12 09:57:18 -05:00
|
|
|
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2002-07-12 12:39:49 -04:00
|
|
|
Transferring PEP Ownership
|
2003-05-03 12:01:32 -04:00
|
|
|
==========================
|
|
|
|
|
|
|
|
It occasionally becomes necessary to transfer ownership of PEPs to a
|
2012-12-22 06:30:14 -05:00
|
|
|
new champion. In general, it is preferable to retain the original author as
|
2003-05-03 12:01:32 -04:00
|
|
|
a co-author of the transferred PEP, but that's really up to the
|
|
|
|
original author. A good reason to transfer ownership is because the
|
|
|
|
original author no longer has the time or interest in updating it or
|
|
|
|
following through with the PEP process, or has fallen off the face of
|
|
|
|
the 'net (i.e. is unreachable or not responding to email). A bad
|
2012-12-22 06:30:14 -05:00
|
|
|
reason to transfer ownership is because the author doesn't agree with the
|
|
|
|
direction of the PEP. One aim of the PEP process is to try to build
|
|
|
|
consensus around a PEP, but if that's not possible, an author can always
|
|
|
|
submit a competing PEP.
|
2003-05-03 12:01:32 -04:00
|
|
|
|
2016-10-15 00:38:43 -04:00
|
|
|
If you are interested in assuming ownership of a PEP, you can also do this via
|
|
|
|
pull request. Fork the `PEP repository`_, make your ownership modification,
|
|
|
|
and submit a pull request. You should also send a message asking to take
|
|
|
|
over, addressed to both the original author and the PEP editors
|
|
|
|
<peps@python.org>. If the original author doesn't respond to email in a
|
|
|
|
timely manner, the PEP editors will make a unilateral decision (it's not like
|
|
|
|
such decisions can't be reversed :).
|
2002-07-12 12:39:49 -04:00
|
|
|
|
|
|
|
|
2007-05-01 11:37:43 -04:00
|
|
|
PEP Editor Responsibilities & Workflow
|
|
|
|
======================================
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2016-10-15 00:38:43 -04:00
|
|
|
A PEP editor must subscribe to the <peps@python.org> list and must watch the
|
|
|
|
`PEP repository`_. Most correspondence regarding PEP administration can be
|
|
|
|
handled through GitHub issues and pull requests, but you may also use
|
|
|
|
<peps@python.org> for semi-private discussions. Please do not cross-post!
|
2007-05-01 00:00:51 -04:00
|
|
|
|
|
|
|
For each new PEP that comes in an editor does the following:
|
|
|
|
|
|
|
|
* Read the PEP to check if it is ready: sound and complete. The ideas
|
|
|
|
must make technical sense, even if they don't seem likely to be
|
|
|
|
accepted.
|
|
|
|
|
|
|
|
* The title should accurately describe the content.
|
|
|
|
|
|
|
|
* Edit the PEP for language (spelling, grammar, sentence structure,
|
|
|
|
etc.), markup (for reST PEPs), code style (examples should match PEP
|
|
|
|
8 & 7).
|
|
|
|
|
2012-12-22 06:30:14 -05:00
|
|
|
If the PEP isn't ready, an editor will send it back to the author for
|
2007-05-01 00:00:51 -04:00
|
|
|
revision, with specific instructions.
|
|
|
|
|
2012-12-22 06:30:14 -05:00
|
|
|
Once the PEP is ready for the repository, a PEP editor will:
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2012-03-12 20:06:44 -04:00
|
|
|
* Assign a PEP number (almost always just the next available number,
|
|
|
|
but sometimes it's a special/joke number, like 666 or 3141).
|
2012-12-22 06:30:14 -05:00
|
|
|
(Clarification: For Python 3, numbers in the 3000s were used for
|
2012-03-12 20:06:44 -04:00
|
|
|
Py3k-specific proposals. But now that all new features go into
|
2012-12-22 06:30:14 -05:00
|
|
|
Python 3 only, the process is back to using numbers in the 100s again.
|
2012-03-12 20:06:44 -04:00
|
|
|
Remember that numbers below 100 are meta-PEPs.)
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2016-10-15 00:38:43 -04:00
|
|
|
* Add the PEP to a local fork of the PEP repository. For workflow
|
2012-12-22 06:30:14 -05:00
|
|
|
instructions, follow `The Python Developers Guide <http://docs.python.org/devguide>`_
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2016-06-26 01:33:12 -04:00
|
|
|
The git repo for the peps is::
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2016-06-26 01:33:12 -04:00
|
|
|
https://github.com/python/peps
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2012-05-05 08:56:57 -04:00
|
|
|
* Run ``./genpepindex.py`` and ``./pep2html.py <PEP Number>`` to ensure they
|
|
|
|
are generated without errors. If either triggers errors, then the web site
|
|
|
|
will not be updated to reflect the PEP changes.
|
2007-05-01 15:53:12 -04:00
|
|
|
|
2012-05-05 08:56:57 -04:00
|
|
|
* Commit and push the new (or updated) PEP
|
2012-12-22 06:30:14 -05:00
|
|
|
|
2007-05-01 00:00:51 -04:00
|
|
|
* Monitor python.org to make sure the PEP gets added to the site
|
2012-12-22 06:30:14 -05:00
|
|
|
properly. If it fails to appear, running ``make`` will build all of the
|
|
|
|
current PEPs. If any of these are triggering errors, they must be
|
|
|
|
corrected before any PEP will update on the site.
|
2007-05-01 00:00:51 -04:00
|
|
|
|
|
|
|
* Send email back to the PEP author with next steps (post to
|
2010-09-03 15:08:36 -04:00
|
|
|
python-list & -dev).
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2016-10-15 00:38:43 -04:00
|
|
|
Updates to existing PEPs should be submitted as a `GitHub pull request`_.
|
|
|
|
Questions may of course still be sent to <peps@python.org>.
|
2007-05-01 00:00:51 -04:00
|
|
|
|
|
|
|
Many PEPs are written and maintained by developers with write access
|
|
|
|
to the Python codebase. The PEP editors monitor the python-checkins
|
|
|
|
list for PEP changes, and correct any structure, grammar, spelling, or
|
2012-12-22 06:30:14 -05:00
|
|
|
markup mistakes they see.
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2012-12-22 06:30:14 -05:00
|
|
|
PEP editors don't pass judgment on PEPs. They merely do the
|
|
|
|
administrative & editorial part (which is generally a low volume task).
|
2007-05-01 00:00:51 -04:00
|
|
|
|
|
|
|
Resources:
|
|
|
|
|
2011-10-06 10:38:55 -04:00
|
|
|
* `Index of Python Enhancement Proposals <http://www.python.org/dev/peps/>`_
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2011-10-06 10:38:55 -04:00
|
|
|
* `Following Python's Development
|
|
|
|
<http://docs.python.org/devguide/communication.html>`_
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2011-10-06 10:38:55 -04:00
|
|
|
* `Python Developer's Guide <http://docs.python.org/devguide/>`_
|
2007-05-01 00:00:51 -04:00
|
|
|
|
|
|
|
* `Frequently Asked Questions for Developers
|
2011-10-06 10:38:55 -04:00
|
|
|
<http://docs.python.org/devguide/faq.html>`_
|
2007-05-01 00:00:51 -04:00
|
|
|
|
2016-10-15 00:38:43 -04:00
|
|
|
|
2000-08-15 01:54:18 -04:00
|
|
|
References and Footnotes
|
2003-05-03 12:01:32 -04:00
|
|
|
========================
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2016-06-26 01:33:12 -04:00
|
|
|
.. [1] This historical record is available by the normal git commands
|
2012-02-29 01:29:36 -05:00
|
|
|
for retrieving older revisions, and can also be browsed via HTTP here:
|
2016-06-26 01:33:12 -04:00
|
|
|
https://github.com/python/peps
|
2000-07-25 13:59:08 -04:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
.. [2] PEP 2, Procedure for Adding New Modules, Faassen
|
2006-03-23 22:24:04 -05:00
|
|
|
(http://www.python.org/dev/peps/pep-0002)
|
2000-08-16 23:11:08 -04:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
.. [3] PEP 9, Sample Plaintext PEP Template, Warsaw
|
2006-03-23 22:24:04 -05:00
|
|
|
(http://www.python.org/dev/peps/pep-0009)
|
2001-03-21 12:05:27 -05:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
.. [4] PEP 12, Sample reStructuredText PEP Template, Goodger, Warsaw
|
2006-03-23 22:24:04 -05:00
|
|
|
(http://www.python.org/dev/peps/pep-0012)
|
2000-08-16 23:11:08 -04:00
|
|
|
|
2018-04-27 04:21:50 -04:00
|
|
|
.. [5] More details on the PEP rendering and publication process can be found
|
|
|
|
in the PEPs repo README at
|
|
|
|
https://github.com/python/peps/blob/master/README.rst
|
2001-03-21 12:05:27 -05:00
|
|
|
|
2007-08-24 17:23:06 -04:00
|
|
|
.. _issue tracker:
|
|
|
|
http://bugs.python.org/
|
2000-08-17 01:01:20 -04:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
.. _Open Publication License: http://www.opencontent.org/openpub/
|
2001-07-05 14:52:25 -04:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
.. _reStructuredText: http://docutils.sourceforge.net/rst.html
|
2001-08-14 19:58:09 -04:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
.. _Docutils: http://docutils.sourceforge.net/
|
2002-08-26 12:19:25 -04:00
|
|
|
|
2016-06-26 01:33:12 -04:00
|
|
|
.. _PEP repository: https://github.com/python/peps
|
2012-05-05 08:56:57 -04:00
|
|
|
|
2016-10-15 00:38:43 -04:00
|
|
|
.. _`GitHub pull request`: https://github.com/python/peps/pulls
|
|
|
|
|
2018-04-21 02:42:53 -04:00
|
|
|
.. _`GitHub issue`: https://github.com/python/peps/issues
|
|
|
|
|
2000-07-13 02:33:08 -04:00
|
|
|
|
2001-03-21 12:05:27 -05:00
|
|
|
Copyright
|
2003-05-03 12:01:32 -04:00
|
|
|
=========
|
2001-03-21 12:05:27 -05:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
This document has been placed in the public domain.
|
2000-08-16 23:11:08 -04:00
|
|
|
|
2012-12-22 06:30:14 -05:00
|
|
|
|
2003-05-03 12:01:32 -04:00
|
|
|
..
|
|
|
|
Local Variables:
|
|
|
|
mode: indented-text
|
|
|
|
indent-tabs-mode: nil
|
|
|
|
sentence-end-double-space: t
|
|
|
|
fill-column: 70
|
2006-03-02 14:54:50 -05:00
|
|
|
coding: utf-8
|
2003-05-03 12:01:32 -04:00
|
|
|
End:
|