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

Python 增強提案 (Python Enhancement Proposals)

PEP 8015 – Python 社群的組織

作者:
Victor Stinner
狀態:
已否決 (Rejected)
類型:
資訊類
主題:
治理
建立日期:
04-Oct-2018

目錄

摘要

此 PEP 正式化了 Python 社群目前的組織,並提出了 3 項主要變革

  • 正式化「Python 團隊」的現有概念;
  • 賦予 Python 團隊更大的自主權;
  • 以新的 5 人「Python 治理委員會」取代 BDFL (Guido van Rossum),該委員會的職責有限:基本上決定如何做出決策,但本身不做出決策。

PEPs 由 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 核心開發者。團隊是自治的,負責選擇誰可以以及如何加入團隊。

團隊成員可以在團隊錯誤追蹤器組件上獲得錯誤分類 (bug triage) 權限。您參與團隊的程度越深,您獲得的決策權和責任就越大。

團隊可能會被允許自行決定其 PEP,但只有 Python 治理委員會才能允許(並且它也有權撤銷此權限)。這種情況是例外的,目前只有一個團隊擁有此權限:套件管理團隊。

請參閱 附錄:Python 團隊範例

Python 核心開發者

核心開發者的一個受限定義是能夠合併變更(程式碼的任何部分)並擁有錯誤分類 (bug triage) 權限(在所有錯誤追蹤器組件上)。

核心開發者是經證明擁有所需技能的開發者,能夠決定一項變更是否可以批准或必須拒絕,而且(更重要的是)哪些變更不應做出。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 週。為了避免自我審查,投票採用不記名投票:避免可能獲得更多權力的人(如果他們當選)產生敵意的風險。

投票採用 孔多塞方法 (Condorcet method)舒爾茨/擊敗路徑/CSSD (Schulze/Beatpath/CSSD) 變體,使用線上服務,例如 孔多塞網路投票服務 (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 社群組織者實施和執行行為準則。

本工作小組的組織由 行為準則工作小組章程 定義。

特殊情況:禁止核心開發者

作為 Python 社群的任何其他成員,PSF 行為準則工作小組可以在有限時間內禁止核心開發者。在這種情況下,該核心開發者立即失去其核心開發者身分。核心開發者在行為準則方面應當是模範。

一般而言,當所有其他選項都已用盡時,禁止才是最終手段。

禁令結束後,該開發者被允許再次以普通貢獻者的身分貢獻。

如果該開發者改變其行為,另一位核心開發者可以組織一次新的投票,提議將該開發者晉升為核心開發者。投票遵循與任何其他 Python 貢獻者相同的流程。

PEP 流程

PEP 有 2 個主要職責

  • 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

此 PEP 的第一個版本是在 Guido van Rossum 於 2018 年 7 月決定辭去 BDFL 職務後撰寫的。在此 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 週 私密 孔多塞 (Schulze/Beatpath/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 及更舊版本的向後移植 (backport),請參閱 PyPI 上的 typing

版本歷史

此 PEP 的歷史

  • 版本 7:調整治理委員會
    • 治理委員會現在由 5 人組成,而非 3 人。
    • 沒有任期限制(以前是限制 2 個任期:總共 6 年)。
    • 委員會成員現在可以擔任 PEP 委派者。
  • 版本 6:調整投票
    • 指定孔多塞方法:使用舒爾茨/擊敗路徑/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

最後修改時間:2025-02-01 08:55:40 GMT