Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 1 – PEP 目的和指南

作者:
Barry Warsaw, Jeremy Hylton, David Goodger, Alyssa Coghlan
状态:
活跃
类型:
流程
创建日期:
2000年6月13日
发布历史:
2001年3月21日,2002年7月29日,2003年5月3日,2012年5月5日,2013年4月7日

目录

什么是PEP?

PEP代表Python增强提案(Python Enhancement Proposal)。PEP是向Python社区提供信息,或描述Python新特性、其流程或环境的设计文档。PEP应提供对该特性的简洁技术规范和理由。

我们打算将PEP作为提出主要新特性、收集社区对某个问题的意见以及记录Python设计决策的主要机制。PEP作者负责在社区内建立共识并记录不同意见。

由于PEP以文本文件形式维护在版本控制仓库中,其修订历史就是特性提案的历史记录。通过正常的git命令可以检索旧版本,也可以在GitHub上浏览。

PEP受众

PEP典型的主要受众是CPython参考解释器的核心开发者及其选举产生的指导委员会,以及Python语言规范其他实现方式的开发者。

然而,Python社区的其他部分也可以选择使用此流程(特别是信息性PEP)来记录预期的API约定,并管理需要跨多个项目协作的复杂设计协调问题。

PEP类型

PEP有三种类型

  1. 标准跟踪(Standards Track)PEP描述了Python的新特性或实现。它也可以描述一个互操作性标准,该标准将在标准库之外为当前的Python版本提供支持,之后再由一个PEP在未来版本中添加标准库支持。
  2. 信息性(Informational)PEP描述了Python的设计问题,或向Python社区提供一般性指南或信息,但不提出新特性。信息性PEP不一定代表Python社区的共识或建议,因此用户和实现者可以自由地忽略信息性PEP或遵循其建议。
  3. 流程(Process)PEP描述了围绕Python的流程,或提议对某个流程进行更改(或事件)。流程PEP类似于标准跟踪PEP,但适用于Python语言本身以外的领域。它们可能提出一种实现,但不是针对Python代码库的;它们通常需要社区共识;与信息性PEP不同,它们不仅仅是建议,用户通常不能自由地忽略它们。示例包括程序、指南、决策过程的更改以及Python开发中使用的工具或环境的更改。任何元PEP也被视为流程PEP。

PEP工作流程

Python指导委员会

本PEP中多次提及“指导委员会”或“委员会”。这指的是PEP 13中描述的选举产生的指导委员会的现任成员,他们作为PEP是否被接受或拒绝的最终权威。

Python核心开发者

本PEP中多次提及“核心开发者”。这指的是PEP 13中描述的当前活跃的Python核心团队成员。

Python的BDFL

本PEP的早期版本曾使用“BDFL-Delegate”来称呼PEP决策者。这是对Python先前治理模型的历史引用,在该模型中,所有设计权限最终都源于Python编程语言的原始创建者Guido van Rossum。相比之下,指导委员会的设计权限源于其由当前活跃的核心开发者选举产生。现在,PEP-Delegate取代了BDFL-Delegate。

PEP编辑

PEP编辑是负责管理PEP工作流程的行政和编辑方面的人员(例如,分配PEP编号和更改其状态)。详见PEP编辑职责与工作流程

PEP编辑职位由现任编辑邀请,可以通过在GitHub上提及@python/pep-editors来联系他们。所有的PEP工作流程都可以通过GitHub PEP仓库的议题和拉取请求进行。

从Python的新想法开始

PEP流程从Python的一个新想法开始。强烈建议一个PEP只包含一个核心提案或新想法;PEP越集中,往往越成功。大多数增强和错误修复不需要PEP,可以直接提交到Python问题追踪器。如果PEP提案显得过于分散或过于宽泛,PEP编辑保留拒绝的权利。如有疑问,请将您的PEP拆分成几个重点明确的PEP。

每个PEP都必须有一个倡导者——撰写PEP的人,按照下面描述的风格和格式,在适当的论坛中引导讨论,并努力在理念周围建立社区共识。PEP倡导者(即作者)应首先尝试确定该理念是否“PEP可行”。在Python DiscourseIdeas类别发帖通常是最佳途径,除非有更专业的场所适用,例如Python Discourse上的Typing类别(用于静态类型理念)或Packaging类别(用于打包理念)。

在撰写PEP之前公开审查一个想法是为了节省潜在作者的时间。许多提出改变Python的想法因各种原因被拒绝。首先询问Python社区一个想法是否具有原创性有助于防止在根据之前的讨论(搜索互联网并不总是有效)注定会被拒绝的事情上花费太多时间。它还有助于确保该想法适用于整个社区,而不仅仅是作者。仅仅因为一个想法对作者来说听起来不错,并不意味着它会在Python使用的多数领域对大多数人有效。

一旦倡导者向Python社区询问某个想法是否有被接受的机会,就应该将PEP草案提交到上述适当的场所。这让作者有机会充实PEP草案,使其格式正确、质量高,并解决对提案的初步担忧。

提交PEP

在上述初步讨论之后,工作流程会根据PEP的共同作者中是否有核心开发者而有所不同。如果PEP的一个或多个共同作者是核心开发者,他们将负责遵循下面概述的流程。否则(即所有共同作者都不是核心开发者),PEP作者将需要为PEP寻找赞助者。

理想情况下,会确定一位核心开发者赞助者,但经指导委员会批准,也可以选择非核心赞助者。GitHub“PEP编辑”团队的成员和类型委员会(PEP 729)的成员被预先批准为赞助者。赞助者的工作是为PEP作者提供指导,帮助他们完成PEP流程的后勤工作(有点像导师)。成为赞助者**不会**使该人失去以后成为共同作者或PEP-Delegate的资格(但不能同时兼任)。PEP的赞助者记录在标题的“Sponsor:”字段中。

一旦赞助者或共同撰写PEP的核心开发者认为PEP已准备好提交,该提案应通过GitHub拉取请求作为草案PEP提交。草案必须按照以下描述的PEP风格编写,否则将立即审查失败(尽管小错误可能会由编辑修正)。

标准的PEP工作流程是

  • 您,PEP作者,克隆PEP仓库,并创建一个名为pep-NNNN.rst的文件,其中包含您的新PEP。NNNN应该是未被已发布或正在PR中的PEP使用的下一个可用PEP编号。
  • 在“PEP:”标题字段中,输入与您的文件名匹配的PEP编号作为您的草案PEP编号。
  • 在“Type:”标题字段中,根据情况输入“Standards Track”、“Informational”或“Process”,并在“Status:”字段中输入“Draft”。详情请参阅PEP标题序言
  • 更新.github/CODEOWNERS,以便将对PEP仓库具有写入权限的任何共同作者或赞助者列入您的新文件。这确保了将来任何更改该文件的拉取请求都将分配给他们。
  • 将其推送到您的GitHub分支并提交拉取请求。
  • PEP编辑审查您的PR以检查结构、格式和其他错误。对于reST格式的PEP,PEP 12提供了模板。它还提供了PEP中使用的reST标记的完整介绍。批准标准是
    • 它是健全且完整的。想法必须在技术上合理。编辑不考虑它们是否可能被接受。
    • 标题准确描述了内容。
    • PEP的语言(拼写、语法、句子结构等)和代码风格(示例应符合PEP 7PEP 8)应正确且符合规范。提交拉取请求时,PEP文本将自动检查reStructuredText格式是否正确。包含无效reST标记的PEP将不予批准。

    编辑们通常对这种初步审查相当宽容,期望问题会通过审查过程得到纠正。**注意:**PEP的批准不保证没有令人尴尬的错误!正确性是作者和审查者的责任,而非编辑的责任。

    如果PEP尚未准备好批准,编辑会将其退回给作者进行修改,并附上具体说明。

  • 一旦获得批准,他们将为您的PEP分配一个编号。

一旦审查过程完成,并且PEP编辑批准了它(请注意,这**并非**等同于接受您的PEP!),他们会将您的拉取请求合并到主分支。

PEP编辑不会无故拒绝发布PEP。拒绝PEP状态的原因包括重复工作、技术上不健全、未提供适当的动机或未解决向后兼容性问题,或者不符合Python哲学。在批准阶段可以咨询指导委员会,他们是草案PEP可行性的最终仲裁者。

PEP仓库具有写入权限的开发者可以通过创建和提交新的PEP直接声明PEP编号。这样做时,开发者必须处理通常由PEP编辑负责的任务(参见PEP编辑职责与工作流程)。这包括确保初始版本符合提交PEP的预期标准。或者,即使是开发者也应通过拉取请求提交PEP。这样做时,通常期望您自行处理流程;如果您需要PEP编辑的帮助,请在GitHub上提及@python/pep-editors

当需要更新时,如果PEP作者(或协作开发者)对PEP仓库具有写入权限,他们可以提交新版本。尽早分配PEP编号对于方便引用很有用,尤其是在同时考虑多个草案PEP时。

标准跟踪PEP由设计文档和参考实现两部分组成。通常建议至少与PEP一起开发一个原型实现,因为原则上听起来不错的想法在实施测试时有时会变得不切实际。

讨论PEP

一旦PEP编号被分配,并且草案PEP被提交到PEP仓库,就应该为PEP创建一个讨论线程,以提供一个集中的地方来讨论和审查其内容,并且应该更新PEP,以便Discussions-To标题链接到它。

PEP作者(或赞助者,如果适用)可以选择任何合理的讨论场所,只要符合以下标准:

  • 论坛与PEP主题相符。
  • 该线程在网络上公开可用,以便所有感兴趣的各方都可以参与。
  • 讨论受Python社区行为准则的约束。
  • 在PEP的Discussions-To标题下提供当前讨论线程的直接链接。

Python DiscoursePEPs类别是大多数新PEP的首选,而历史上常用的是Python-Dev邮件列表。某些专业主题有专门的场所,例如Python Discourse上的Typing类别Packaging类别,分别用于类型和打包PEP。如果PEP作者不确定最佳场所,PEP赞助者和PEP编辑可以提供相应的建议。

如果PEP进行了重大重写或对其提议规范进行了其他重大、实质性更改,通常应在选定的场所创建一个新线程,以征求额外的反馈。如果发生这种情况,必须更新Discussions-To链接,并添加一个新的Post-History条目指向此新线程。

如果未选择其作为讨论场所,则在草案PEP提交到仓库时,以及进行足够大的更改以触发新线程时,应向PEPs类别发布简短的公告帖子,其中至少包含指向渲染PEP和Discussions-To线程的链接。

PEP作者负责在提交审查之前收集PEP的社区反馈。然而,为了避免冗长和开放式讨论,应考虑以下策略:在早期设计阶段征求私下或更具体化的反馈,与在PEP主题方面有专业知识的其他社区成员协作,并为PEP主题选择适当的专门讨论(如果适用)。PEP作者应在此处自行判断。

一旦PEP被分配编号并提交到PEP仓库,实质性问题通常应在规范的公共线程上进行讨论,而不是私人渠道、GitHub拉取请求审查或不相关的场所。这确保了每个人都可以关注和贡献,避免了讨论的分裂,并确保其作为PEP审查过程的一部分得到充分考虑。对该指定线程的评论、支持、担忧和其他反馈是指导委员会或PEP-Delegate在审查PEP时将考虑的关键部分。

PEP审查与决议

一旦作者完成PEP,他们可以请求PEP编辑进行风格和一致性审查。然而,PEP的内容审查和接受最终由指导委员会负责,该过程通过在作者(和赞助者,如果有)确定PEP已准备好进行最终审查和决议后,打开一个指导委员会问题正式启动。

为了在特定情况下加速流程(例如,当某项更改显然有益且已准备好被接受,但PEP尚未正式提交审查时),指导委员会也可以启动PEP审查,首先通知PEP作者并给予他们修改的机会。

PEP批准的最终权威是指导委员会。然而,每当提出新的PEP时,任何认为自己有足够经验对该PEP做出最终决定的核心开发者都可以通过通知指导委员会其意图来提出担任其PEP-Delegate。如果指导委员会批准其提议,PEP-Delegate将拥有批准或拒绝该PEP的权力。对于与Python类型系统相关的PEP,类型委员会(PEP 729)向指导委员会提供建议。要请求此类建议,请在类型委员会问题追踪器上打开一个问题。

在指导委员会治理模型下,“PEP-Delegate”一词用于PEP的指定决策者,其记录在PEP标题的“PEP-Delegate”字段中。“BDFL-Delegate”是PEP-Delegate的已弃用别名,是Python由BDFL领导时期的历史遗留。任何遗留的“BDFL-Delegate”引用都应视为等同于“PEP-Delegate”。

自荐担任PEP-Delegate的个人必须通知相关的作者和(如果存在)PEP的赞助者,并向指导委员会提交请求(可以通过新问题完成)。承担此责任的人员可以随时寻求指导委员会的额外指导,并应考虑其他核心开发者的建议和观点。

指导委员会通常会默认批准此类自荐,但可能会选择拒绝。指导委员会拒绝自荐为PEP-Delegate的可能原因包括但不限于:感知到潜在的利益冲突(例如,与PEP提交者在同一组织工作),或者仅仅认为另一位潜在的PEP-Delegate更合适。如果核心开发者(或其他社区成员)对某个给定PEP的PEP-Delegate的适宜性有疑问,他们可以要求指导委员会审查该授权。

如果没有志愿者站出来,那么指导委员会将联系具有相关专业知识的核心开发者(以及可能其他Python社区成员),以尝试找到愿意担任该PEP的PEP-Delegate的候选人。如果找不到合适的候选人,那么该PEP将被标记为“延期”,直到有合适的候选人出现。

先前任命的PEP-Delegate可以选择辞职,或被委员会要求辞职,在这种情况下,将以与新PEP相同的方式任命新的PEP-Delegate(包括如果找不到合适的替代者,则将PEP延期)。如果PEP-Delegate被要求辞职,这将推翻之前对PEP的任何接受或拒绝,并且该PEP将恢复为草案状态。

当设立此类常设授权时,指导委员会将维护足够的公共记录,以使后续委员会、核心开发者以及更广泛的Python社区能够了解当前存在的授权、设立原因以及可能不再需要授权的情况。

要被接受,PEP必须满足某些最低标准。它必须是对所提议增强功能的清晰完整的描述。增强功能必须代表净改进。所提议的实现(如果适用)必须稳健,并且不得过度复杂化解释器。最后,所提议的增强功能必须“符合Python风格”才能被指导委员会接受。(然而,“符合Python风格”是一个不精确的术语;它可以被定义为指导委员会可以接受的任何东西。这个逻辑是有意循环的。)有关标准库模块接受标准的详细信息,请参阅PEP 2

除非指导委员会另行批准,否则PEP决议的公告将发布到Python Discourse上的PEPs类别

一旦PEP被接受,参考实现必须完成。当参考实现完成并并入主源代码仓库时,其状态将更改为“Final”。

为了在语言特性或标准库API长期稳定之前收集额外的设计和接口反馈,PEP也可以被标记为“Provisional”。这缩写为“Provisionally Accepted”,表示该提案已被接受并纳入参考实现,但在完整设计被视为“Final”之前,还需要额外的用户反馈。与常规接受的PEP不同,临时接受的PEP即使在相关更改已包含在Python版本中之后,仍可能被拒绝或撤回。

在可能的情况下,最好缩小提案范围,以避免依赖“临时”状态(例如,通过将某些功能推迟到后续的PEP),因为这种状态可能导致更广泛的Python生态系统中出现版本兼容性挑战。PEP 411提供了关于“临时”状态潜在用例的更多细节。

PEP也可以被分配“延期(Deferred)”状态。当PEP没有进展时,PEP作者或编辑可以为PEP分配此状态。一旦PEP被延期,PEP编辑可以将其重新分配为草案状态。

PEP 也可能被“拒绝”(Rejected)。也许经过一番讨论,发现它并非一个好主意。记录这一事实仍然很重要。“撤回”(Withdrawn)状态类似——这意味着PEP作者自己决定该PEP实际上是个坏主意,或者接受了竞争提案是一个更好的替代方案。

当一个PEP被接受、拒绝或撤回时,应相应地更新PEP。除了更新状态字段外,至少应添加Resolution标题,其中包含指向就PEP做出决定的相关帖子的直接链接。

PEP也可以被不同的PEP取代,使原始的PEP过时。这适用于信息性PEP,其中API的第2版可以取代第1版。

PEP状态的可能路径如下

PEP process flow diagram

虽然图中未显示,“已接受”的PEP即使在接受后也可能技术上转变为“已拒绝”或“已撤回”。这仅在实现过程揭示设计中的根本缺陷且在PEP接受前未被发现时才会发生。与临时PEP不同,这些转换仅在接受的提案**未**包含在Python版本中时才允许——已发布的更改必须经过常规的弃用流程(这可能需要一个新的PEP来提供弃用的理由)。

一些信息性和流程PEP如果从不打算完成,也可能具有“活跃(Active)”状态。例如PEP 1(本PEP)。

PEP维护

一般来说,PEP在达到“已接受”、“最终”、“已拒绝”或“已取代”状态后,不再进行实质性修改。一旦达成决议,PEP就被视为历史文档而非活规范。预期的行为的正式文档应在其他地方维护,例如核心特性的语言参考、标准库模块的库参考或打包的PyPA规范

如果在“临时”或(经SC批准)“已接受”状态下的标准跟踪PEP根据实现经验和用户反馈进行更改,应在PEP中注明,以便PEP在标记为“最终”时准确描述其实现。

活跃(信息性或流程性)PEP可能会随着时间推移进行更新,以反映开发实践和其他细节的变化。在这些情况下遵循的具体流程将取决于相关PEP的性质和目的。

偶尔,一个“延期”甚至“撤回”的PEP可能会通过重大更新而复活,但通常最好直接提出一个新的PEP。

一个成功的PEP应该包含什么?

每个PEP应包含以下部分:

  1. 前言 – RFC 2822 风格的标题,包含关于PEP的元数据,包括PEP编号、简短的描述性标题(最多44个字符)、作者姓名以及可选的联系信息等。
  2. 摘要 – 对所解决技术问题的简短(约200字)描述。
  3. 动机 – 动机对于希望改变Python语言、库或生态系统的PEP至关重要。它应清楚地解释为什么现有语言规范不足以解决PEP解决的问题。这可以包括从Python生态系统中的重要项目收集对PEP的支持文档。缺乏充分动机的PEP提交可能会被拒绝。
  4. 理由 – 理由通过描述做出特定设计决策的原因来充实规范。它应该描述考虑过的替代设计和相关工作,例如该功能在其他语言中是如何支持的。

    该理由应提供社区内部共识的证据,并讨论在讨论过程中提出的重要异议或担忧。

  5. 规范 – 技术规范应描述任何新语言特性的语法和语义。规范应足够详细,以允许至少在当前主要Python平台(CPython、Jython、IronPython、PyPy)上进行竞争性、可互操作的实现。
  6. 向后兼容性 – 所有引入向后不兼容性的PEP都必须包含一个描述这些不兼容性及其严重程度的部分。PEP必须解释作者如何提议处理这些不兼容性。缺乏充分的向后兼容性论述的PEP提交可能会被直接拒绝。
  7. 安全影响 – 如果PEP存在安全隐患,应明确写出这些隐患,以确保PEP的审阅者知晓。
  8. 如何教授 – 对于添加新功能或更改语言行为的PEP,包含一个关于如何教导新老用户将PEP应用于其工作的章节会很有帮助。

    本节可包括关键点和建议的文档更改,这些将帮助用户采用新功能或将其代码迁移以使用语言更改。

  9. 参考实现 – 参考实现必须在任何PEP获得“最终”状态之前完成,但不必在PEP被接受之前完成。虽然在编写代码之前就规范和理由达成共识的方法有其优点,但“大致共识和运行代码”的原则在解决许多API细节讨论时仍然有用。

    最终实现必须包含适用于Python语言参考或标准库参考的测试代码和文档。

  10. 被拒绝的想法 – 在PEP讨论过程中,会提出各种未被接受的想法。这些被拒绝的想法应连同拒绝的原因一并记录。这既有助于记录PEP最终版本背后的思考过程,又可以防止人们在后续讨论中再次提出相同被拒绝的想法。

    从某种意义上说,本节可以看作是“理由”部分的细分,专门关注某些想法最终未被采纳的原因。

  11. 未解决的问题 – 当PEP处于草案阶段时,可能会出现一些需要进一步讨论的想法。这些想法应该被记录下来,以便人们知道它们正在被考虑但尚未有具体的解决方案。这有助于确保PEP准备好考虑所需的所有问题都已完成,并减少人们重复之前的讨论。
  12. 致谢 – 用于感谢和表彰帮助开发、讨论或起草PEP的人员,或用于任何其他目的。本节可用于认可非共同作者的工作贡献者。
  13. 脚注 – PEP中引用的脚注集合,以及列出非内联超链接目标的地方。
  14. 版权/许可 – 每个新的PEP必须置于公共领域和CC0-1.0-Universal的双重许可之下(请参阅本PEP以获取示例)。

PEP格式和模板

PEP是使用reStructuredText格式进行UTF-8编码的文本文件。reStructuredText允许丰富的标记,但仍然非常易读,并且能生成美观且功能齐全的HTML。PEP 12包含说明和PEP模板

PEP文本文件会自动转换为HTML(通过基于Sphinx构建系统),以便于在线阅读

PEP头部序言

每个PEP都必须以RFC 2822风格的头部序言开头。头部必须按以下顺序出现。标有“*”的头部是可选的,并将在下面描述。所有其他头部都是必需的。

  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>

作者头列出了PEP所有作者/所有者的姓名,以及可选的电子邮件地址。作者头值的格式必须是

Random J. User <random@example.com>

如果包含电子邮件地址,则只需

Random J. User

如果未给出地址。大多数PEP作者使用他们的真名,但如果您更喜欢不同的名字并在与PEP相关的讨论中始终使用它,请随意在此处使用。

如果有多位作者,则每位作者应遵循RFC 2822续行约定,各自占据单独一行。请注意,PEP中的个人电子邮件地址将进行混淆处理,以防御垃圾邮件收集器。

Sponsor字段记录了哪个开发者(核心开发者,或经指导委员会特别批准的开发者)正在赞助该PEP。如果PEP的作者之一是核心开发者,则无需赞助者,因此应省略此字段。

PEP-Delegate字段用于记录由指导委员会任命的个人,负责对PEP的批准或拒绝做出最终决定。

注意:Resolution 标题仅对标准跟踪 PEP 必需。它包含一个 URL,该 URL 应指向做出关于 PEP 的声明(即批准或拒绝)的电子邮件消息或其他网络资源。

Discussions-To 标题提供了指向 PEP 当前规范讨论线程的 URL。对于电子邮件列表,这应该是一个直接链接到列表中存档中该线程的链接,而不是仅仅是一个 mailto: 或指向列表本身的超链接。

类型标题指定了PEP的类型:标准跟踪、信息性或流程。

可选的Topic标题列出了PEP所属的特殊主题(如果有)。请参阅主题索引以查看现有主题。

创建日期(Created)标题记录了PEP被分配编号的日期,而发布历史(Post-History)则用于记录PEP讨论线程的日期和相应的URL,前者作为链接文本,后者作为链接目标。两组日期都应采用dd-mmm-yyyy格式,例如14-Aug-2001

标准跟踪 PEP 通常会有一个 Python-Version 标题,指示该功能将在哪个 Python 版本中发布。没有 Python-Version 标题的标准跟踪 PEP 表示互操作性标准将最初通过外部库和工具支持,然后可能会由后续的 PEP 补充,以将支持添加到标准库中。信息性和过程性 PEP 不需要 Python-Version 标题。

PEP可以有一个Requires头,指示该PEP所依赖的PEP编号。

PEP也可以有一个Superseded-By标题,表明一个PEP已被后续文档取代;其值是取代当前文档的PEP编号。较新的PEP必须有一个Replaces标题,包含它所取代的PEP编号。

辅助文件

PEP可以包含辅助文件,如图表。此类文件应命名为pep-XXXX-Y.ext,其中“XXXX”是PEP编号,“Y”是序列号(从1开始),“ext”替换为实际的文件扩展名(例如“png”)。

或者,所有支持文件都可以放置在名为pep-XXXX的子目录中,其中“XXXX”是PEP编号。使用子目录时,文件中的名称没有限制。

修改现有PEP

在提交给指导委员会或PEP-Delegate审查和决议之前,草案PEP可由作者自行决定自由讨论和建议修改。实质性内容更改通常应首先在PEP的Discussions-To标题中列出的讨论线程上提出,而文本编辑和更正可以作为GitHub问题GitHub拉取请求提交。拥有PEP仓库写入权限的PEP作者可以使用git push或GitHub PR自行更新PEP。有关修改其他PEP的指南,请查阅PEP维护部分。

有关更多详细信息,请参阅贡献指南,如有疑问,请首先咨询PEP作者和/或PEP编辑。

转移PEP所有权

有时需要将PEP的所有权转让给新的倡导者。一般来说,最好保留原作者作为转让PEP的共同作者,但这实际上取决于原作者。转让所有权的一个好理由是原作者不再有时间或兴趣更新它或继续PEP流程,或者已经从互联网上消失了(即无法联系或不回复电子邮件)。转让所有权的一个糟糕理由是作者不同意PEP的方向。PEP流程的一个目标是尝试围绕PEP建立共识,但如果不可能,作者总是可以提交一个竞争性的PEP。

如果您有兴趣承担PEP的所有权,您也可以通过拉取请求完成此操作。克隆PEP仓库,进行所有权修改,然后提交拉取请求。您应该在拉取请求的评论中提及原作者和@python/pep-editors。(如果原作者的GitHub用户名未知,请使用电子邮件。)如果原作者没有及时回复,PEP编辑将做出单方面决定(这种决定并非不能撤销:)。

PEP编辑职责与工作流程

PEP编辑必须加入GitHub上的@python/pep-editors组,并且必须关注PEP仓库

请注意,对PEP仓库具有写入权限的开发者可以处理通常由PEP编辑负责的任务。或者,即使是开发者也可以通过在GitHub上提及@python/pep-editors来请求PEP编辑的帮助。

对于每个新的PEP,编辑会执行以下操作:

  • 确保该PEP由核心开发者共同撰写,或由核心开发者赞助,或由指导委员会为此PEP特别批准的赞助者赞助。
  • 阅读PEP,检查它是否已准备就绪:健全且完整。这些想法必须在技术上合理,即使它们看起来不太可能被接受。
  • 标题应准确描述内容。
  • 文件扩展名正确(即.rst)。
  • 确保PEP的所有赞助者或共同作者中,对PEP仓库具有写入权限的人员都已添加到.github/CODEOWNERS中。
  • 快速浏览PEP,检查语言(拼写、语法、句子结构等)和代码风格(示例应符合PEP 7PEP 8)是否存在明显缺陷。编辑可以自行纠正问题,但并非必须这样做(reStructuredText语法由仓库的CI检查)。
  • 如果一个项目被描述为受益于或支持PEP,请确保包含来自该项目的一些直接指示,以明确表示支持。这是为了避免PEP在事实上支持基于推测的情况下,意外地将一个项目描绘成支持该PEP。

如果PEP尚未准备就绪,编辑会将其退回给作者进行修改,并附上具体说明。如果reST格式有问题,请要求作者使用PEP 12作为模板并重新提交。

一旦PEP准备好进入仓库,PEP编辑将

  • 检查作者是否选择了有效的PEP编号,如果未选择则分配一个(几乎总是下一个可用编号,但有时是特殊/玩笑编号,如666或3141)。

    请记住,小于100的数字是元PEP。

  • 检查作者是否正确标记了PEP的类型(“Standards Track”、“Informational”或“Process”),并将其状态标记为“Draft”。
  • 确保所有CI构建和 lint 检查都通过,没有错误,并且渲染的预览输出中没有明显的问题。
  • 合并新的(或更新的)PEP。
  • 告知作者下一步(打开讨论线程并更新PEP,发布公告等)。

现有 PEP 的更新应作为GitHub 拉取请求提交。

许多PEP由对Python代码库具有写入权限的开发者编写和维护。PEP编辑会监控PEP仓库的更改,并纠正他们发现的任何结构、语法、拼写或标记错误。

PEP编辑不对PEP作出判断。他们只负责行政和编辑部分(这通常是一个低工作量的任务)。

资源


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

上次修改时间:2025-08-09 01:23:33 GMT