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

Python 增强提案

PEP 772 – 包装理事会治理流程

作者:
Barry Warsaw <barry at python.org>, Deb Nicholson <deb at python.org>, Pradyun Gedam <pradyunsg at gmail.com>
讨论至:
Discourse 帖子
状态:
草案
类型:
流程
主题:
治理, 包装
创建日期:
2025年1月21日
发布历史:
2025年2月6日, 2025年5月30日, 2025年7月25日
取代:
609

目录

摘要

本 PEP 提议设立一个 Python 包装理事会,对包装标准、工具和实现拥有广泛权力。与 Python 指导委员会一样,包装理事会力求尽可能少地行使此权力;相反,他们利用此权力建立标准流程。

PEP 8016 类似,本 PEP 不试图在一份 PEP 中完成所有事情,而是专注于为进一步的治理决策提供一个最小而坚实的基础。

动机与原理

随着 Python 包装的成熟,当前管理技术开发、决策制定和流程的方式出现了几个相互关联的问题。

PyPA

Python 包装机构 (PyPA) 的成立旨在接管 Ian Bicking 的 pipvirtualenv 的维护工作,由 Brian Rosner、Carl Meyer 和 Jannis Leidel 领导。多年来,PyPA 中增加了更多项目,PyPA 维护的工具成为 Python 包装的基础工具,其他包生态系统使用并基于 PyPA 维护的工具和互操作性标准进行构建。

PEP 609 正式确立了 PyPA 对现有包装工具、互操作性标准及其作为同一伞形下旨在互操作的独立项目组的运作的权力。它还指出,当提出生态系统范围的更改时,PyPA 应提供意见、见解和经验。特别是,支持现有项目和维护用户指南的工作非常出色。

在撰写本文时,PyPA 没有社区选举产生的机构,并且该小组内的个人是临时会议,而不是定期会议。PyPA 本身由一组项目而非一组个人定义,对其个人没有直接监督。

包装工作组

PSF 的包装工作组旨在通过筹款和分配募集资金来支持改进和维护 Python 包装生态系统的更大努力。预计它将主要关注 Python Package Index (PyPI)、pip、packaging.python.org、Setuptools 和跨项目协作等工作。

该小组过去在这方面取得了很好的进展,但过去几年支持 Python 包装生态系统的范围和规模已大大增加。要做的工作更多,利益相关者也比以往任何时候都多。包装工作组也不是一个社区选举产生的机构,没有定期更改、添加或删除成员的机制。

互操作性标准

PyPA 负责创建和维护 Python 包装工具的互操作性标准。更新这些标准的决策涉及 Python 指导委员会对特定主题的特定个人的常设授权,并且这些个人有能力将更改的决策进一步授权给其他个人。

我们知道这个过程是不可持续的,许多人表达了希望有一个指定机构来做出这些决策(包括拥有常设授权的个人)。

Python 指导委员会

虽然 PyPA、包装工作组和 Python 核心团队之间存在重叠,但指导委员会不适合直接就 Python 包装事务做出决策。包装仅与 Python 语言演变有切线关系,包装需要专业知识和深厚的领域知识(很像类型或 C API),并且包装理事会的潜在选举人与指导委员会的潜在选举人不同。

预期

一个民选的包装理事会将对互操作性标准拥有权力,将指导 CPython 提供的包装工具,并有权协调 Python 包装工作。这将为包装者、包消费者、工具开发者、PyPI 和其他索引维护者提供更好、更一致的体验。通过更大的透明度和更清晰的目标,通过民选的包装理事会,PSF 也将能够为生态系统的所有部分提供更多的战术工作、更长期的战略愿景和筹款支持。

关于包装理事会成立的一些期望是,他们将

  • 与 PSF 员工和新成立的用户成功工作组合作,改进包装的用户体验。
  • 发布和推广与 Python 包装相关的 API、协议、接口和其他互操作性标准。
  • 促进一个更稳定的包装生态系统,该系统对社区输入更具响应性。
  • 提高透明度,清晰地分享包装生态系统的目标。
  • 促进 PSF 的战术和筹款支持,以增加包装工具的容量和可用资金。

规范

包装理事会

包装理事会将由五名个人组成。

授权

理事会应致力于

  • 维护 Python 包装标准的质量和稳定性。
  • 正式确定并维护与 Python 核心团队以及 Python 软件基金会的工作关系。
  • 建立适当的决策流程。
  • 改善 Python 包装的用户体验。
  • 使贡献尽可能易于访问、包容和可持续。
  • 在以正式身份行事之前,努力寻求贡献者之间的共识。

职责

理事会应

  • 对在 https://packaging.pythonlang.cn 上维护的 Python 包装标准和 Python 包装用户指南拥有广泛权力。
  • 建立关于包装标准、工具和实现以及考虑生态系统范围变化的具有约束力的决策流程。
  • 寻找尽可能少地使用其直接权力的方式——寻求共识和同意而不是投票。

为了行使权力,包装理事会进行投票。每位理事会成员必须投票或明确弃权。在特定投票中存在利益冲突的成员必须弃权。通过需要获得多数非弃权理事会成员的支持,这需要至少3名非弃权成员的法定人数。如果包装理事会无法(例如,因缺乏法定人数)或不愿自行做出决定,它也可以将此事提交给指导委员会,指导委员会对此事的决定将具有约束力。

在可能的情况下,包装理事会应及时公开其决定和流程。

授权

包装理事会通过 Python 指导委员会的授权获得其对包装事务的权力。本 PEP 获得批准后,指导委员会应正式向包装理事会发布关于 Python 包装相关 PEP 的常设授权,取代现有的个人常设授权。各机构将就涉及包装领域和语言管理(包括 CPython 实现、标准库和分发)的问题进行合作。

鼓励 PSF 董事会正式停用包装工作组,包装理事会将承担 PSF 包装工作组的职责。

PyPA 预计将与包装理事会合作,建立一个管理 PyPA 伞形下技术项目的决策流程。

流程

包装理事会选举

包装理事会选举包括以下阶段

  • 第一阶段:包装理事会选举人由 PSF 投票成员自愿选择确定。PSF 投票成员被告知将提供包装理事会选票,任何 PSF 投票成员都可以索取选票。PSF 可以选择同时征集 PSF 董事会选举和包装理事会选举的参与。包装理事会选举人保留其一整年的投票权,并可以在当年可能发生的其他社区范围内的投票中行使此类权利。
  • 第二阶段:包装理事会选举人可以提名任何个人参加理事会选举,包括他们自己。被提名者必须是 PSF 投票成员,提名必须包含有关被提名者相关隶属关系的信息。
  • 第三阶段:每位选举人都会收到一份包含所有合格被提名者的选票,选举人使用该选票为包装理事会投票。选举机制(即用于进行选举的软件、用于确定投票结果的算法等)由 PSF 按照 PSF 章程及其常规董事会选举程序进行。如果出现平局,可以通过候选人之间的相互协议解决,否则将随机选择获胜者。

每个阶段将持续两周。

包装理事会选举程序由 PSF 董事会提名的选举主任管理。PSF 应维护选举记录,并运行包装理事会的年度选举。PSF 董事会必须认证选举结果,并可以与选举主任合作,以任何必要的能力验证选举的公正性。选举透明度对于对过程的信任至关重要,在任何排除之前,在保持匿名的情况下,应公布完整的投票总数(如果技术上可能)。

包装理事会投票(无论是分组选举还是不信任投票)的法定人数是选举人的 50%。

任期

理事会成员将分为两组:A 组由两名成员组成,B 组由三名成员组成。

每位理事会成员的任期为两年,除非他们是替补辞职、被罢免或因其他原因空缺的理事会成员,在这种情况下,替补成员的任期应足以完成从原组任期算起的两年任期。

每位理事会成员的任期为两年,从他们的选举结果最终确定之时起,直到他们所在组的下一次选举结果最终确定为止。

由于包装理事会选举通常会与 PSF 董事会选举的时间保持一致,因此在“非周期”理事会选举(例如首次理事会选举)中选出的任何成员也将在其所在组的下一次常规选举之前任职。

仅针对整个包装理事会的选举(例如首次理事会选举),获得最高票数的两名候选人将被指定为 A 组,任期两年;获得次高票数的三名候选人将被指定为 B 组,任期一年。

理事会成员没有任期限制。

空缺

包装理事会成员可随时辞职。

在包装理事会正常任期内出现空缺时,理事会可投票任命一名替补成员,以完成剩余任期。

如果一名理事会成员失联且一个月或更长时间无法联系上,则其余理事会成员可以投票替换他们(以简单多数票通过,失联成员记录为弃权)。

如果通过此流程无法组建完整的包装理事会,PSF 董事会可与 Python 指导委员会协商,任命新的包装理事会成员填补空缺,或要求进行新的包装理事会选举。

利益冲突

包装理事会成员中,受雇于同一实体或对同一实体拥有决策权的成员不得超过两名。实体包括公司及其子公司,或具有自身使命和目标的其他法人实体,例如非营利组织或教育机构。为此,“受雇于”包括其他形式的因当前工作而获得报酬,无论劳动力分类如何;“对……拥有决策权”包括担任高级管理人员/董事职务和拥有 25% 或更多的所有权份额。

虽然我们期望并信任包装理事会成员以 Python 的最佳利益而非自身或其附属机构的最佳利益行事,但任何此类组织主导 Python 包装开发的简单表象本身就可能有害并侵蚀信任。

PSF 员工不得担任包装理事会成员。

现任指导委员会成员不得同时担任包装理事会成员。

在理事会选举中,如果前五名得票者中有超过两名受雇于同一雇主,则只有前两名此类得票者当选,其他人员将被取消资格,其余得票者将按投票排名提升。此过程将重复进行,直到形成一个有效的包装理事会。如果在此过程之后无法形成完整的理事会,则被取消资格的得票者将按其得票数排名重新获得资格,直到可以形成完整的理事会为止。

如果当选人数少于五人,则采用类似程序以确保整个包装理事会中受雇于同一雇主的人员不超过两人。

在包装理事会任期内,如果情况变化导致本规则被打破(例如,由于理事会成员更换工作),则一名或多名理事会成员必须辞职以纠正问题,由此产生的空缺可以按正常程序填补。

行为准则

所有包装理事会选举人及包装理事会成员均须遵守 PSF 行为准则、其执行程序以及经裁定违反行为准则的补救措施。

包装理事会将适度管理其空间并酌情支持 PSF 行为准则在该领域的执行。

包装理事会选举人

职责

包装理事会选举人参与正式投票以选举包装理事会。

包装理事会选举人的资格等同于 PSF 章程中定义的第四条第 4.2 款投票会员资格。如果这些章程将来发生变化,包装理事会选举人的资格也将相应地进行匹配。包装理事会选举人必须以与 PSF 董事会投票会员资格确认类似的方式和程序确认他们打算在包装理事会选举中投票。

PSF 投票成员可以(每年或无限期)选择不参与包装理事会选举,这独立于他们选择参与 PSF 董事会选举的决定。

流程

不信任投票

在特殊情况下,可以发起不信任投票,以罢免一名现任包装理事会成员,或整个理事会。Python 指导委员会可以发起此类不信任投票,无需附议。任何人都可以向指导委员会请求进行此类不信任投票,无论请求者的会员资格或隶属关系如何,指导委员会可自行决定是否发起投票。PSF 董事会可以否决指导委员会的决定,以启动不信任投票。

不信任投票持续两周。每位选举人投票赞成或反对。如果至少三分之二的选举人表示不信任,则投票成功。

不信任投票有两种形式:针对单个成员的投票和针对整个理事会的投票。首次要求不信任投票时必须明确指定类型。如果单个成员的投票成功,则该成员将被罢免,由此产生的空缺可按正常程序处理。如果整个理事会的投票成功,则理事会解散,并立即根据整个理事会选举规则触发新的理事会选举。

修改治理

对本治理模型提出的更改必须经 Python 指导委员会批准。

被拒绝的想法

所有理事会成员的年度选举

理事会成员的年度任期是 Python 指导委员会选举所采用的方法。本 PEP 采用基于组的模型,源自 PSF 董事会的选举,这使得成员能够在不断变化的理事会中保持连续性。

理事会的连续性和彻底改组之间存在权衡。本 PEP 认为连续性对 Python 包装生态系统更有价值。

理事会成员的任期限制

虽然这通常被认为对董事会很有价值,但由于感兴趣和合格的人员池的规模,这被否决了。

选举人资格

本 PEP 草案的先前迭代提出了不同的成员资格规则来确定包装理事会选举人。经过利益相关者之间的广泛讨论,并征求了尽可能广泛的反馈后,PEP 作者同意将包装理事会选举人与 PSF 董事会投票成员资格对齐既是最可行的安排,也是最公平的方法,以纳入 Python 包装社区的所有部分。

此处使用 PSF 会员资格是因为它向最广泛的 Python 社区开放。特别是,大多数从事 Python 包装工作的人都在公共场合进行此类工作,包括为 PyPA 或非 PyPA 项目做出贡献,并且很可能根据该工作而有资格获得 PSF“贡献会员资格”而无需支付任何会费。

选举中的赞成投票

本 PEP 早期一份非公开草案采用了赞成投票程序,这与当时撰写 PEP 13 的内容相符。Python 核心团队已将其治理方式改为使用 Bloc STAR,本 PEP 也曾暂时更改为使用相同的机制。然而,由于包装理事会选举现在将与 PSF 董事会选举同时进行,且拥有相同的投票选民(即 PSF 投票成员),并由相同的选举主任管理,因此本 PEP 已更新,使包装理事会选举与 PSF 董事会选举保持一致。

禁止来自同一组织的两人在理事会任职

本 PEP 目前借鉴了 Python 指导委员会的限制,即与单一组织相关的个人在理事会中最多只能有两人。

限制为一人是可行的;尽管在指导委员会中尚未出现这种情况,但人们确实会流动,我们不希望优秀的候选人因包装理事会成员资格而做出就业决定,或因就业变化而不得不辞职。将其限制为最多两人,加上不信任投票,可能足以避免任何不当的雇主影响。

建立包装理事会与 PyPA 关系的具体流程

正如摘要中所述,本 PEP 的重点是为进一步的治理决策提供一个最小而坚实的基础。这种关系的具体细节将由首届理事会决定。

附录 A:PEP 审批流程

鉴于必须达成一致的各方,本 PEP 可能需要非典型的审批流程。为此,作者将提交本 PEP

  1. 由 PSF 董事会投票,董事会必须批准包装理事会选举人与 PSF 会员资格的关联,以及包装工作组的停用。
    • 决议:Python 软件基金会授权设立包装理事会,如 2025 年 7 月 25 日发布的 PEP 772 草案所述,前提是 PEP 作者在 PEP 772 中添加明确赋予包装理事会执行 PSF 行为准则的权力,以及基金会另行批准的执行机制。
    • PR 4550 中添加了所请求的语言。
  2. 根据 PEP 609 中概述的流程,对 pypa-committers 邮件列表进行投票
  3. 由 Python 指导委员会正式批准

我们将根据建议、意见和反馈调整并更新 PEP,并迭代直到获得所有必要的批准。

附录 B:理事会运营建议

本节基于 PEP 作者认为对包装理事会建立操作流程有益的事项。这些是非强制性的,但强烈鼓励。

PSF 将指定一名工作人员作为包装理事会的官方联络人,定期参加会议,因为预计包装理事会将定期召开会议(例如,每月两次)。

  • 与指导委员会协调需要两个小组输入的 PEP。
  • 与 PyPA 协调其正在进行的为单个项目提供支持的工作。
  • 将具有小众重点的倡议/PEP 授权给包装社区的领域专家或工作组(类似于指导委员会如何将某些 PEP 发送给 C API 工作组)。
  • 规划可能最适合通过雇佣人员完成的工作,然后与 PSF 合作确定成果和合理的预算。
  • 鼓励包装理事会(类似于指导委员会)与 PSF 的行为工作组进行沟通并在必要时寻求建议。
  • 定期与指导委员会在双方商定的频率下同步,建议频率不少于每季度一次。
  • 及时发布公开议程和会议纪要。
  • 提供非正式的实时机会,供人们提出非 PEP 主题,例如办公时间、论坛频道或 Python 活动中的专题讨论。

致谢

本 PEP 的语言和精神是整个 Python 包装生态系统中许多尽心尽职、充满热情的贡献者的成果。PEP 作者衷心感谢所有参与并提供意见的人,我们真诚地相信,正是由于他们的参与,本 PEP 及其预期成果才得以大大改善。本 PEP 只是一个(尽管重要的)步骤,我们鼓励并赞扬所有 Python 包装利益相关者为不断改进包装用户体验所做的持续贡献。


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

最后修改:2025-08-18 18:40:59 GMT