PEP 602 – Python 的年度發布週期
- 作者:
- Łukasz Langa <lukasz at python.org>
- PEP 委託人:
- Brett Cannon <brett at python.org>
- 討論於:
- Discourse 討論串
- 狀態:
- 作用中
- 類型:
- 流程
- 建立日期:
- 2019 年 6 月 4 日
- Python 版本:
- 3.9
- 公告歷史:
- 2023 年 10 月 9 日
- 決議:
- Python-Dev 討論串
摘要
本文檔描述了從 Python 3.9 開始的 Python 發布日曆變更。此變更旨在加速發布節奏,使得功能版本能以每年十月為週期,可預測地每十二個月發布一次。
實作
十七個月的開發週期以發布功能版本
本 PEP 提議 Python 3.X.0 的開發週期約為 17 個月
- 最初的 五個月 與 Python 3.(X-1).0 的 Beta 和候選發布階段重疊,因此這段時間內沒有版本號。
- 接下來的 七個月 用於版本化的 Alpha 發布,期間會增量加入新功能並包含錯誤修復。
- 隨後的 三個月 用於四個版本化的 Beta 發布,期間不允許加入新功能,但仍會包含錯誤修復。
- 最後的 兩個月 用於發布兩個(如有必要可更多)候選版本(Release Candidate),並以 Python 3.X.0 的最終發布作為結束。
2 年完整支援,外加 3 年安全性修復
Python 3.X.0 發布後,3.X 系列將維持五年的支援期
- 在 前二十四個月(2 年)內,它將接收錯誤修復更新,並且大約每隔一個月發布一次完整版本(包含原始碼以及 Windows 和 macOS 安裝程式)。
- 在接下來的 三十六個月(3 年)內,它將接收安全性更新,且僅視需求發布原始碼更新(無固定週期)。
- 最後的原始碼版本將在 3.X.0 發布後 五年 發布。
注意:2 年的完整支援自 Python 3.13 起算。Python 3.9 - 3.12 版本採用的是 1 年半的完整支援,隨後是 3 年半的安全性修復。
年度發布節奏
Python 3.(X+1).0 的功能開發會在 Python 3.X.0 Beta 1 發布後立即開始。這使得 Python 功能版本之間的間隔為十二個月。
範例
- 3.9 開發開始:2019 年 6 月 4 日,星期二
- 3.9.0 alpha 1:2019 年 10 月 14 日,星期一
- 3.9.0 alpha 2:2019 年 11 月 18 日,星期一
- 3.9.0 alpha 3:2019 年 12 月 16 日,星期一
- 3.9.0 alpha 4:2020 年 1 月 13 日,星期一
- 3.9.0 alpha 5:2020 年 2 月 17 日,星期一
- 3.9.0 alpha 6:2020 年 3 月 16 日,星期一
- 3.9.0 alpha 7:2020 年 4 月 13 日,星期一
- 3.9.0 beta 1:2020 年 5 月 18 日,星期一(此後不再增加新功能。)
- 3.9.0 beta 2:2020 年 6 月 8 日,星期一
- 3.9.0 beta 3:2020 年 6 月 29 日,星期一
- 3.9.0 beta 4:2020 年 7 月 20 日,星期一
- 3.9.0 candidate 1:2020 年 8 月 10 日,星期一
- 3.9.0 candidate 2:2020 年 9 月 14 日,星期一
- 3.9.0 final:2020 年 10 月 5 日,星期一
圖 1. 年度發布週期對日曆的影響。
相比之下,如果此 PEP 被拒絕且 Python 維持目前的發布進度
- 3.9 開發開始:2019 年 6 月 4 日,星期二
- 3.9.0 alpha 1:2020 年 8 月 3 日,星期一(晚 10 個月)
- 3.9.0 alpha 2:2020 年 9 月 7 日,星期一
- 3.9.0 alpha 3:2020 年 10 月 5 日,星期一
- 3.9.0 alpha 4:2020 年 11 月 2 日,星期一
- 3.9.0 beta 1:2020 年 11 月 30 日,星期一(晚 6 個月)
- 3.9.0 beta 2:2021 年 1 月 4 日,星期一
- 3.9.0 beta 3:2021 年 2 月 1 日,星期一
- 3.9.0 beta 4:2021 年 3 月 1 日,星期一
- 3.9.0 candidate 1:2021 年 3 月 29 日,星期一
- 3.9.0 candidate 2:2021 年 4 月 5 日,星期一(若有必要)
- 3.9.0 final:2021 年 4 月 19 日,星期一(晚 6 個月)
相關依賴政策
棄用政策
當前關於重大變更的政策假設在從 Python 中移除棄用功能或預設啟用 __future__ 行為之前,至少經過兩次發布週期。這在 PEP 387 中有記錄。
本 PEP 提議維持此政策,即在進行重大變更前至少經過兩次發布。
指導委員會(Steering Council)任期
目前的 PEP 13 條文規定「每次功能發布後選舉出新委員會」。本 PEP 提議維持此政策,因為這將確保選舉時間表的一致性。
發布經理(Release Manager)任期
目前未成文的慣例是由單一發布經理處理兩次 Python 功能發布。本 PEP 提議維持此政策,並允許經指導委員會和發布經理小組批准後,將任期延長至更多次發布。
特別地,由於本 PEP 由現任發布經理撰寫,且其影響將縮短發布經理的任期,作者願意管理第三次功能發布以彌補此調整帶來的影響。
原理與目標
此變更具有以下優點:
- 使發布規模更小:因為加倍發布節奏並不會使我們的開發資源倍增,連續的發布在功能上會更精簡;
- 讓使用者能更快取得功能與錯誤修復;
- 透過減少單次發布中的變更範圍,為使用者創造更平緩的升級路徑;
- 創造了可預測的發布日曆,最終發布總是在十月(核心開發者年度 Sprint 之後),Beta 階段開始於五月下旬(PyCon US Sprint 之後),這對於需要規劃 Python 參與行程的核心開發者來說尤為重要;
- 減少了在「Beta 1」之前倉促完成功能的衝動,因為不用擔心「錯過就要等 18 個月」;
- 允許將 Python 發布管理時程與 Fedora 等外部發行商同步,這些發行商歷來在早期發現核心 Python 及第三方庫回歸測試問題方面非常有幫助,推動社群從第一天起就支援最新版本的 Python;
- 增加了顯式的 Alpha 發布階段,提供新功能進展的有意義快照;
- 顯著縮短了隱式的「Alpha 0」發布階段,該階段對新開發用途有限(它與目前正在開發、尚未發布的版本的 Beta 階段重疊)。
非目標
採用年度發布日曆可以自然地轉換為日曆版本號,例如將 Python 3.9 稱為「Python 3.20」,因為它在 20 年 10 月發布,依此類推(「Python 3.23」將是 23 年 10 月發布的版本)。
雖然切換到日曆版本號的便利性可以被視為年度發布週期的一個優點,但本 PEP 並不主張或反對更改 Python 的版本命名方式。如果採用了年度發布週期,版本號問題將在單獨的 PEP 中處理。
非風險因素
此變更不會縮短目前記錄的 Python 發布支援日曆,無論是在錯誤修復發布還是安全性修復方面。
此變更不會加速開發速度。Python 不會更快變得不相容,也不會更快堆積新功能。只是功能會隨著開發進度更漸進地發布。
因此,雖然此變更讓使用者能夠更快升級,但並不強制要求他們這麼做。如果他們每隔一個版本升級一次,他們的使用體驗將與目前情況相似。
風險因素
Python 重新散佈
這需要更改 Linux 發行版等整合商在其系統中發布 Python 的方式。
測試矩陣
這最終增加了希望支援所有活躍版本(一或兩個版本)的程式庫與應用程式維護者的測試矩陣。
圖 2. 18 個月節奏與 12 個月節奏下的測試矩陣比較
當前發布週期中「由發布經理酌情決定的擴展錯誤修復支援」階段並未編纂成法。事實上,PEP 101 目前規定在 Python 3.(X+1).0 發布後,僅對 Python 3.X.0 進行最後一次錯誤修復發布。然而,實際上至少最近四個 Python 3 版本在與下一個穩定版本重疊期間約為六個月。圖 2 包含了此資訊,以證明 12 個月發布節奏下的穩定版本重疊並非新鮮事。
其他可能依賴發布節奏的政策
儘管相關依賴政策已在前一節中討論過,但很可能還存在其他隱式依賴 Python 發布時間的領域。
否決的想法
維持現行的 18 個月發布週期
這對核心開發者和終端使用者來說都是不受歡迎的。從核心開發者的角度來看:
- 由於每年不規律的發布日期,使貢獻規劃變得困難;
- 由於擔心「錯過發布」的壓力,在 Beta 1 之前(甚至之後!)導致了大量倉促的提交;
- 諷刺的是,在 Beta 1 之後,它會造成一種「還有很多時間」的錯覺,然而時間總是在不知不覺中流逝;
- 它導致某些工作流程因為執行頻率過低,不僅沒有被自動化,甚至連文檔都沒有明確記載。
更重要的是,從使用者的角度來看:
- 它創造了包含許多新功能的發布,其中一些顯式不相容,一些意外不相容,這使得每次升級的代價都相對高昂;
- 它會將功能和不相容的錯誤修復保留一年以上才對使用者開放;更具體地說:
- 它使每個「點零」版本對使用者來說都格外有風險。雖然我們提供並建議使用 Alpha 和 Beta 版本進行測試,但對許多使用者來說,「點零」是特定 Python 版本的第一次發布。發布的功能越多,「點零」版本中隱藏的潛在問題就越多。
將發布節奏加倍,以達到功能版本間隔 9 個月
這最初在 PEP 596 中提出,並因太過不規律且週期太短而被拒絕。這不會提供規律發布日曆的任何好處,但會縮短所有開發階段,特別是 Beta + RC 階段,這被認為是有風險的。
維持「4 個月內發布 4 個 Beta 版本,外加 1 個月的發布候選版本」
雖然這會讓發布日曆更整潔,但 它會使 Fedora 等外部發行商很難儘早發布最新版本的 Python。我們調整 Python 的日曆是希望這能使 Fedora 能夠在 Fedora 和 Python 的最新版本同時開發時進行整合,這會讓兩個專案都更好。
放慢發布速度,但不在 Beta 1 時凍結功能開發
這在 PEP 598 中有描述。該提案包含了「增量功能發布」等非標準概念,使其難以理解。目前所呈現的優勢不明確,且該方案的陌生感對使用者和整合商造成了真正的混亂風險。
長期支援版本(LTS)
每個 Python 版本實際上都是長期支援版本:它享有五年的支援,其中前十八個月允許進行常規錯誤修復和安全性更新。剩餘時間內只接受安全性更新並及時發布。
未來不打算提供類似 Python 2.7 的擴展支援。
版權
本文件已進入公有領域或遵循 CC0-1.0-Universal 授權,以較寬鬆者為準。
來源:https://github.com/python/peps/blob/main/peps/pep-0602.rst
最後修改時間:2024-05-28 05:47:01 GMT