Sphinx 的發布流程

版本控制

Sphinx 遵循 PEP 440 版本規範,針對發布區段採用 major.minor.micro 方案(例如 1.2.3)。主要、次要和微小版本部分應按以下方式變更:

  • 當行為變更不相容且公開 API 更新時,應遞增主要版本部分。

  • 對於 Sphinx 的大多數發布版本,應遞增次要版本部分,其中 API 和功能的向後相容性得以保留。

  • 微小版本部分僅應針對緊急錯誤修復版本遞增。

當主要版本部分遞增時,次要和微小版本部分必須設定為 0。當次要版本部分遞增時,微小版本部分必須設定為 0

新的主要版本應在最終發布之前進行 beta 測試期。

棄用功能

Sphinx 中可能有幾種程式碼被棄用的原因:

  • 如果某項功能以向後不相容的方式進行了改進或修改,則舊功能或行為將被棄用。

  • 有時 Sphinx 會包含 Python 函式庫的回溯移植,該函式庫未包含在 Sphinx 目前支援的 Python 版本中。當 Sphinx 不再需要支援不包含該函式庫的舊版 Python 時,該函式庫將在 Sphinx 中被棄用。

正如棄用政策所述,棄用功能的第一個 Sphinx 版本 (A.B) 應在調用已棄用功能時引發 RemovedInSphinxXXWarning(其中 XX 是將移除該功能的 Sphinx 版本)。假設我們有良好的測試覆蓋率,當啟用警告執行測試套件時,這些警告會轉換為錯誤。

pytest -Wall

因此,當新增 RemovedInSphinxXXWarning 時,您需要消除或靜音執行測試時產生的任何警告。

棄用政策

主要和次要版本可能會棄用先前版本中的某些功能。如果某項功能在 A.x 版本中被棄用,它將在所有 A.x.x 版本(對於所有 x 版本)中繼續運作。它將在所有 B.x.x 版本中繼續運作,但會引發棄用警告。棄用的功能將在 C.0.0 版本中移除。這表示棄用的功能至少會在 2 個主要版本期間運作。

因此,舉例來說,如果我們決定在 Sphinx 2.x 中開始棄用某個函式:

  • Sphinx 2.x 將包含該函式的向後相容副本,該副本將引發 RemovedInSphinx40WarningRemovedInSphinx40WarningPendingDeprecationWarning 的子類別,也就是說,預設情況下不會顯示。

  • Sphinx 3.x 仍將包含向後相容副本,但 RemovedInSphinx40Warning 將會是 DeprecationWarning 的子類別,然後預設情況下會顯示。

  • Sphinx 4.0 將完全移除該功能。

棄用警告

如果未設定 PYTHONWARNINGS,Sphinx 將預設啟用其 RemovedInNextVersionWarning 警告。因此,您可以使用以下方式停用它們:

  • PYTHONWARNINGS= make html (Linux/Mac)

  • export PYTHONWARNINGS= 並執行 make html (Linux/Mac)

  • set PYTHONWARNINGS= 並執行 make html (Windows)

但您也可以明確啟用待處理的警告,例如使用 PYTHONWARNINGS=default(請參閱 Python 關於設定警告的文件)以了解更多詳細資訊。

Python 版本支援政策

Sphinx 支援自預期發布日期起過去 3 年內發布的所有 Python 次要版本,最少支援 3 個 Python 次要版本。此政策源自 SPEC 0,科學 Python 領域標準。

例如,在 2025 年 5 月發布的 Sphinx 版本將支援 Python 3.11、3.12 和 3.13。

這是一個包含目前政策的摘要表:

日期

Python

2023 年 10 月 5 日

3.10+

2024 年 10 月 4 日

3.11+

2025 年 10 月 24 日

3.12+

2026 年 10 月 1 日

3.13+

2027 年 10 月 1 日

3.14+

發布程序

發布程序列在 utils/release-checklist.rst 中。