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

Python 增強提案 (Python Enhancement Proposals)

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 不試圖在單一文件中解決所有問題,而是專注於為進一步的治理決策提供一個最基本但穩固的基礎。

動機與理由

隨著 Python 封裝技術的成熟,目前管理技術開發、決策制定與流程的方式已顯現出多項相互關聯的問題。

PyPA

Python 封裝管理局 (PyPA) 的成立,是為了從 Ian Bicking 手中接管 pipvirtualenv 的維護工作,並由 Brian Rosner、Carl Meyer 與 Jannis Leidel 領導。多年來,PyPA 增加了更多專案,而其維護的工具已成為 Python 封裝的基準工具,其他套件生態系統亦使用這些由 PyPA 維護的工具與互通性標準並在此基礎上進行構建。

PEP 609 將 PyPA 對現有封裝工具、互通性標準的權力,以及其作為一系列旨在互相通用的獨立專案共同體運作的模式進行了規範化。該文件亦指出,當提出生態系統範圍內的變更時,預期 PyPA 將提供意見、見解與經驗。特別是在支援現有專案與維護使用者指南方面,其表現極為優異。

在撰寫本文時,PyPA 並無社群選舉產生的機構,且該組織內部的個人交流多屬臨時性質,而非規律的週期性會面。PyPA 本身由專案群體定義,而非由個人群體定義,且對其成員亦無直接監督機制。

封裝工作小組 (Packaging-WG)

PSF 的 封裝工作小組 (Packaging-WG) 的成立,旨在透過籌款與資金分配,支援改善與維護 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 軟體基金會 (PSF) 的工作關係。
  • 建立適當的決策制定流程。
  • 改善 Python 封裝的使用者體驗。
  • 盡可能讓貢獻過程變得更加易於參與、包容且永續。
  • 在正式採取行動前,努力尋求貢獻者之間的共識。

職責

委員會應:

  • 對在 https://packaging.python.org 上維護的 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 章程 第 IV 條第 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 軟體基金會授權成立 PEP 772 草案(2025 年 7 月 25 日發布版本)中所述的封裝委員會,前提是 PEP 作者需在 PEP 772 中明確賦予封裝委員會執行 PSF 行為準則的權力,以補充基金會核准的其他執行機制。
    • 請求新增的內容已於 PR 4550 中加入。
  2. 給 pypa-committers 郵寄清單投票,並根據 PEP 609 中概述的流程進行。
  3. 給 Python 指導委員會正式核准。

我們將根據建議、意見與回饋適時整合並更新本 PEP,並不斷反覆運算直到獲得所有必要核准。

附錄 B:委員會營運建議

本節基於 PEP 作者認為封裝委員會若能建立營運流程將非常有益的項目。這些條款非強制性,但強烈建議執行。

PSF 將指派一名工作人員擔任封裝委員會的正式聯絡人,並定期參加會議,預期封裝委員會將定期舉行會議(例如每月兩次)。

  • 與指導委員會協調需要雙方意見的 PEP。
  • 與 PyPA 協調其支援個別專案的持續工作。
  • 對於焦點較窄的倡議/PEP,授權給封裝社群的領域專家或工作小組(類比指導委員會將特定 PEP 發送給 C API 工作小組的做法)。
  • 規劃最適合透過聘用人員完成的工作,並與 PSF 合作建立交付成果與合理的預算。
  • 鼓勵封裝委員會(類似於指導委員會)在必要時與 PSF 的行為工作小組進行溝通並尋求建議。
  • 與指導委員會定期同步,建議頻率至少每季一次。
  • 及時發布公開議程與會議記錄。
  • 提供休閒的即時互動機會,讓人們提出非 PEP 的主題,例如辦公時間 (office hours)、論壇頻道或 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