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

Python 增强提案

PEP 8015 – Python 社区组织

作者:
Victor Stinner
状态:
已拒绝
类型:
信息性
主题:
治理
创建:
2018年10月4日

目录

摘要

本 PEP 正式确定了 Python 社区的当前组织结构,并提出了 3 个主要变更

  • 正式确定现有的“Python 团队”概念;
  • 赋予 Python 团队更多自主权;
  • 用一个新的由 5 名成员组成的“Python 指导委员会”取代 BDFL(Guido van Rossum),该委员会的角色有限:基本上决定如何做出决策,但并不做出决策。

PEP 由 PEP 代表或投票表决批准(仅限核心开发者,需要>= 2/3多数票)。

PEP 拒绝

PEP 8015 已被核心开发者投票拒绝,如 2018 年 12 月 17 日星期一在PEP 8001中所述。

PEP 8016 及其描述的治理模型被选中。

基本原理

本 PEP 描述了整个 Python 开发社区的组织结构,从 Python 用户到 Python 指导委员会。在同一文档中描述所有组和所有角色有助于使组织结构更加一致。

治理变更的数量被最小化,以实现从旧的 BDFL 组织到新的指导委员会组织的平滑过渡。

组织的一个关键设计是避免决策瓶颈。讨论和决策分散到 Python 团队中,在那里可以找到每个主题的专家。预期 PEP 的讨论将更加顺畅:参与人数更少,但对主题的了解更深入。

以前,大多数决策都由终身仁慈独裁者(BDFL)Guido van Rossum 做出。Python 的日益普及增加了对个人的压力。拟议的组织将决策和责任分配出去,以减轻压力并避免任何个人过度劳累。

为了将大部分决策权掌握在社区手中,Python 指导委员会的角色非常有限。其目的是降低少数人或公司仅通过少数个人“接管”Python 项目的风险。该项目必须保持自主,并对所有人开放。

最敏感的 PEP 通过民主方式决定:仅限核心开发者投票,请参阅下面的PEP 流程部分了解投票方法。

通用指南

  • Python 社区对所有人开放。
  • 成员必须遵守Python 社区行为准则,确保讨论保持建设性,并让每个人都感到受欢迎。
  • Python 是并且将继续是一个自主项目。
  • 拥有决策权的人员应反映其用户和贡献者的多样性。

社区组织

目前,Python 项目涉及不同群体的人员。您参与的程度越高,获得的决策权就越大。重要的是,进入最核心群体的人员是最值得信赖的。

本 PEP 正式确定了以下群体

  • Python 用户
  • Python 贡献者
  • Python 团队成员
  • Python核心开发者
  • Python 指导委员会成员
  • PSF 行为准则工作组

Python 用户

这是最大的群体:任何使用 Python 的人都属于此类。

Python 贡献者

一旦 Python 用户向 Python 邮件列表发送电子邮件、在 Python 错误跟踪器上发表评论或提出或审查 Python 代码更改,他们就成为 Python 贡献者。

Python 团队

Python 变得太大,无法再作为一个独立的团队运作,人们自然而然地将其自身组织成团队,以便更紧密地合作处理特定主题,有时称为“特殊兴趣小组”(SIG)。

当足够多的开发人员对特定主题感兴趣时,他们可以创建一个新的团队。通常,主要操作是要求 Python 邮政管理员创建一个新的“SIG”邮件列表,但团队可以选择使用不同的通信渠道。

团队成员是 Python 贡献者和 Python 核心开发者。团队是自我组织的,负责选择谁可以加入团队以及如何加入。

团队成员可以在团队错误跟踪器组件上获得错误分类权限。您参与团队的程度越高,获得的决策权和责任就越大。

团队可能被允许自行决定其 PEP,但只有 Python 指导委员会才能允许这样做(并且有权撤销此权限)。这种情况非常特殊,目前只有一个团队拥有此权限:打包团队。

请参阅附录:Python 团队示例

Python核心开发者

核心开发人员的一个限制性定义是能够合并更改(代码中的任何位置)并拥有错误分类权限(所有错误跟踪器组件)。

核心开发者是经过证明具备必要技能以决定是否批准或拒绝更改的开发人员,而且(这更重要)他们还知道哪些更改不应该进行。Python 拥有悠久的历史,对向后兼容性有很大的限制,并且具有很高的质量标准(例如:更改需要新的测试)。出于这些原因,成为核心开发者可能需要几个月甚至更长时间。

成为核心开发者意味着承担更多责任。例如,如果开发人员合并了更改,他们将对回归和修改代码的维护负责。

核心开发者在遵守行为准则方面应树立榜样。鼓励他们指导贡献者。

提拔贡献者为核心开发者

一旦现有核心开发者认为某位贡献者已准备好加入核心团队,成为核心开发者,该核心开发者就会询问贡献者是否愿意成为核心开发者。如果贡献者对这些新的责任感兴趣,则会组织投票。

投票仅限核心开发者参与,公开进行,持续 1 周。通常,提出晋升的核心开发者必须在投票描述中说明候选人的工作和技能。只有当三分之二(>= 2/3)的投票批准(“+1”)晋升时,候选者才能获得晋升。仅计算“+1”和“-1”票;其他投票(例如:空票、“-0”、“+0.5”)将被忽略。

如果候选人获得晋升,通常他们会获得 1 个月的指导,以帮助他们处理新的责任。

如果候选人未获得晋升,可以在稍后重新组织投票,例如 6 个月后,当候选人获得所需的技能时。

Python 指导委员会

Python 指导委员会由最值得信赖的核心开发者组成,因为它拥有最多的决策权。该组的角色严格限定,以确保 Python 保持其自主性和开放性。

Python 指导委员会由 5 名成员组成。他们任期 3 年,每年更换 1/3(第一年:1 名,第二年:2 名,第三年:2 名)。这样,成员将持续一个完整的 Python 版本,并且委员会组成将频繁更新。委员会成员可以竞选其即将离任的职位。没有任期限制。

委员会成员必须是 Python 核心开发者。重要的是,委员会成员应反映 Python 用户和贡献者的多样性。确保这一点的一小步是强制执行以下规定:最多只有 2 名成员(严格少于 5 名成员的 50%)可以为同一雇主(同一公司或同一公司的子公司)工作。

选择 5 名成员是为了成员多样性和确保即使成员在未知时间内无法工作,委员会也能继续运作。

Python 指导委员会角色

Python 指导委员会角色

  • 决定如何批准(或拒绝或延迟)PEP。
  • 授予或撤销 Python 团队的权限。例如,允许团队向贡献者授予错误分类权限(在团队组件上)。

为了决定如何批准(或拒绝或延迟)PEP,有两种选择

  • 委员会选举一位 PEP 代表(以前称为“BDFL 代表”):一位核心开发者,他将对特定 PEP 做出最终决定。委员会选择 PEP 代表,该代表可以由讨论 PEP 的 Python 团队提名。
  • 委员会可以组织对 PEP 的投票,请参阅PEP 流程了解投票组织方式。委员会决定何时组织投票。对于影响所有 Python 用户的更改(如语言更改),建议进行投票。

委员会维护 Python 的“愿景”和一致性。它还确保重要功能的完成。他们选择 PEP 代表的能力旨在帮助他们实现这一目标。

Python 指导委员会成员选举

投票由指导委员会组织。提前 3 周宣布:候选人必须在此期间申请。投票仅限核心开发者参与,持续 1 周。为了避免自我审查,投票使用无记名投票:避免因可能获得更多权力(如果当选)而产生的敌意风险。

投票使用Schulze/Beatpath/CSSD 变体Condorcet 方法,并使用像Condorcet 互联网投票服务 (CIVS)这样的在线服务。这种投票方法降低了平局的风险。它还会生成所有候选人的排名,这对于创建委员会是必需的。

如果出现平局,则会在涉及平局的候选人之间立即组织新的投票,使用相同的投票方法,持续 1 周。如果第二次投票再次导致平局,则当前指导委员会负责选择当选成员。

如果委员会成员辞职,则会组织新的投票来替换他们。

如果委员会成员的情况发生变化,不再满足委员会约束条件(例如:他们转到与其他两名委员会成员相同的公司),他们必须辞职。如果某位成员的雇主被其他两名成员的雇主收购,则任期较早结束的成员必须在收购完成后辞职。

创建 Python 指导委员会成员的选举

为了启动流程,在委员会创建时选举 5 名成员。投票遵循与常规委员会投票相同的规则,但选举需要 5 名成员,并且投票由 PSF 董事会组织。

在理事会选举中,如果前 5 名得票者中有 3 人在同一雇主工作,则排名最低的那个人将被取消资格,排名第 6 的候选人将晋升至第 5 位;重复此过程,直到形成一个有效的理事会。

如果出现平局,则将在涉及平局的候选人和后续候选人之间立即组织第二轮投票,以填补剩余的席位。投票遵循与常规委员会投票相同的规则。如果第二轮投票仍然出现平局,则 PSF 董事会负责选举成员并决定他们在投票结果中的位置。

投票结果中当选成员的顺序必须唯一:第 1 名和第 2 名当选 3 年,第 2 名和第 3 名当选 2 年,第 5 名当选 1 年。

出现平局的投票结果示例

  • A
  • B
  • C
  • D
  • E, F
  • G

前 4 名候选人(A、B、C 和 D)立即当选。如果 E 与其他两名当选成员在同一雇主工作,则 F 也当选。否则,将在 E 和 F 之间组织第二轮投票以争夺第 5 个席位。

特殊情况:指导委员会成员和 PEP

委员会成员可以是 PEP 代表。

委员会成员可以提议 PEP,但不能是其自己 PEP 的 PEP 代表。

当委员会决定必须对 PEP 进行投票时,委员会成员可以进行投票,因为他们也是核心开发者,但他们没有比其他核心开发者更多的权力。

PSF 行为准则工作组

章程

工作组的目的是通过执行 PSF 行为准则,以及为 Python 社区提供关于行为准则的指导和建议来培养多元化和包容性的 Python 社区,从而支持 PSF 的使命“持续开发 Python 相关技术和教育资源”。

我们通过三种方式朝着这个共同目标努力

  • 审查、修订和就与 PSF 行为准则以及 PSF 支持的其他社区相关的政策提供建议。这包括任何在 PSF 管辖范围内的 #python 聊天社区和 python.org 邮件列表。
  • 为多种交互渠道创建一组标准的行为准则和支持文档,例如但不限于会议、邮件列表、Slack/IRC、代码存储库等。
  • 开发培训材料和其他流程,以支持 Python 社区组织者实施和执行行为准则。

此工作组的组织由ConductWG 章程定义。

特殊情况:禁止核心开发者

与 Python 社区的任何其他成员一样,PSF 行为准则工作组可以无限期地禁止核心开发者。在这种情况下,核心开发者将立即失去其核心开发者身份。在行为准则方面,核心开发者应该树立榜样。

一般来说,禁令仅在所有其他选择都已用尽时才作为最后手段采取。

在禁令结束时,开发者被允许再次作为普通贡献者进行贡献。

如果开发者改变了他们的行为,另一位核心开发者可以组织一次新的投票,提议将该开发者晋升为核心开发者。投票遵循与任何其他 Python 贡献者相同的流程。

PEP 流程

PEP 有两个主要角色

  • PEP 作者
  • PEP 代表

PEP 作者尽最大努力编写高质量的 PEP。

PEP 代表负责帮助作者改进他们的 PEP,并最终做出决定(接受、拒绝或推迟 PEP)。他们还可以帮助指导讨论。

如果没有做出决定,作者可以在以后(例如一年后)再次提出 PEP,如果可能的话,提供新的数据来推动更改。PEP 代表也可以选择将 PEP 标记为“推迟”,以避免拒绝 PEP 并鼓励以后重新讨论。

特定于 Python 团队的 PEP 在团队邮件列表中讨论。影响所有 Python 开发人员的 PEP(如语言更改)必须在 python-dev 邮件列表中讨论。

投票表决 PEP

当 Python 指导委员会决定某个 PEP 需要更广泛的批准时,将组织投票。

投票仅限于核心开发者,是公开的,提前 1 周宣布,开放 1 周。PEP 仍然可以在 1 周的通知期内更新,但在投票期间不得修改。此类投票发生在 PEP 已讨论的邮件列表中。委员会决定何时组织投票。PEP 必须在提交投票之前讨论合理的时间。

只有当三分之二(>= 2/3)的投票批准(“+1”)PEP 时,PEP 才会被批准。仅计算“+1”和“-1”票;其他投票(例如,空值、“-0”、“+0.5”)将被忽略。

PEP 只能通过投票被批准或拒绝,不能被推迟。

缺乏决策

如果讨论未能达成共识,如果 Python 指导委员会未能选择 PEP 代表,或者如果 PEP 代表未能做出决定,那么显而易见的风险是 Python 无法发展。

这没关系。有时,什么都不做是最明智的选择。

修改此 PEP

在 Guido van Rossum 于 2018 年 7 月决定辞去 BDFL 职位后,撰写了此 PEP 的第一个版本。在此 PEP 之前,Python 社区成员的角色从未被正式化。第一次尝试设计一个完美的组织是困难的。此 PEP 可以在将来更新,以调整组织,指定如何处理极端情况并修复错误。

对本 PEP 的任何更改都必须通过投票进行验证。投票提前 3 周宣布,仅限于核心开发者,在 python-committers 邮件列表上公开进行,开放 1 周。拟议的 PEP 更改仍然可以在 3 周的通知期内更新,但在投票期间不得修改。

只有当五分之四(>= 4/5)的投票批准(“+1”)更改时,更改才会被批准。仅计算“+1”和“-1”票;其他投票(例如,空值、“-0”、“+0.5”)将被忽略。

附录:投票总结

投票 通知 开放 投票 方法
提升贡献者 1 周 公开 >= 2/3 多数
PEP 1 周 1 周 公开 >= 2/3 多数
修改此 PEP 3 周 1 周 公开 >= 4/5 多数
指导委员会 3 周 1 周 私有 康德塞特(舒尔茨/比特帕斯/CSSD)

所有这些投票都仅限于核心开发者。

附录:Python 团队示例

以下是一些 Python 团队的示例(此 PEP 中不会保持此列表的最新状态)。

打包团队

打包团队运行自己的 PEP 类别,可以批准(或拒绝)他们自己的 PEP。

  • 网站:packaging.python.org
  • 邮件列表:distutils-sig
  • 错误跟踪组件:Distutils
  • 成员示例:Paul Moore、Alyssa Coghlan、Donald Stuff
  • 标准库模块:distutils
  • 当前 PEP 代表:Paul Moore

IDLE 团队

IDLE 是 Python 标准库中的一个特殊情况:它是一个完整的应用程序,而不仅仅是一个模块。因此,已决定代码在所有 Python 稳定分支中都相同(而标准库在新稳定分支中有所不同)。

  • 错误跟踪组件:IDLE
  • 成员示例:Terry Reedy、Cheryl Sabella、Serhiy Storchaka
  • 标准库模块:idlelib

指导团队

成为核心开发者是一个漫长而缓慢的过程。指导是一种有效的方式来培训贡献者作为未来的核心开发者并建立信任关系。

注意:该小组不负责提升核心开发者。

文档团队

  • 邮件列表:doc-sig
  • 错误跟踪组件:Documentation
  • GitHub 标签:type-doc
  • 成员示例:Julien Palard、INADA Naoki、Raymond Hettinger。

该团队还管理文档翻译。

另请参阅维护“Devguide”的指导团队。

安全团队

security@python.org 邮件列表仅限邀请:只有“Python 安全响应团队”(PSRT)的成员才能阅读和回复电子邮件;而 security-sig 是公开的。

注意:该团队很少提议 PEP。

性能团队

通常,涉及性能的 PEP 会影响所有人,因此在 python-dev 邮件列表中讨论,而不是在 speed 邮件列表中讨论。

异步编程团队

仅修改 asynciocontextvars 的 PEP 可以在 async-sig 邮件列表中讨论,而影响 Python 语言的更改必须在 python-dev 中讨论。

类型提示团队

注意:Python 3.6 及更早版本有一个反向移植版本,请参见 PyPI 上的 typing

版本历史

本 PEP 的历史

  • 版本 7:调整指导委员会
    • 指导委员会现在由 5 人组成,而不是 3 人。
    • 没有任期限制(而不是限制 2 个任期:总共 6 年)。
    • 委员会成员现在可以成为 PEP 代表。
  • 版本 6:调整投票
    • 指定孔多塞方法:使用 Schulze/Beatpath/CSSD 变体选举 Python 指导委员会成员。指定如何处理平局和对雇主的限制。
    • 现在,关于提升贡献者和 PEP 的投票需要 >= 2/3 而不是 50%+1
    • 现在,关于更改本 PEP 的投票需要 >= 4/5 而不是 50%+1
    • 解释如何处理公司收购。
  • 版本 5:Python 指导委员会成员的选举使用无记名投票
  • 版本 4
    • 调整投票:开放 1 周而不是 1 个月,并提前宣布。
    • 将“Python 核心委员会”重命名为“Python 指导委员会”;
    • 澄清该委员会不批准 PEP,并且委员会成员不得累积超过 2 个任期;
    • 将“类型提示”团队添加到附件中。
  • 版本 3:添加“特殊情况:禁止核心开发者”和“如何更新本 PEP”部分。
  • 版本 2:将“Python 委员会”重命名为“Python 核心委员会”,以避免与 PSF 委员会混淆。
  • 版本 1:第一个版本发布到 python-committers 和 discuss.python.org。

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

上次修改时间:2023-10-11 12:05:51 GMT