由 Python 貢獻者 Christian Heimes 和 Brett Cannon 提出的一項,從 Python 標準庫中刪除過時的和未維護的模組的 已被批准通過。該提案最初於 2019 年提交,但直到近日才(3 月 11 日)被批准用於 Python 3.11。有了這個 PEP,Python 3.11 會將某些模組標記為已棄用,Python 3.12 將是最後一個版本包括這些模組。在 Python 3.13 中,不推薦使用的模組將被完全刪除。
此 PEP 提出了一個要從標準庫中刪除的標準庫模組清單。這些模組大多是歷史資料格式(例如 Commodore 和 SUN 檔案格式)、API 和早已被取代的作業系統(例如 Mac OS 9),或者具有安全隱患和更好替代方案(例如密碼和登入)的模組。
一直以來,Python 都有著「batteries included」的理念;其目標是提供一個通用的標準庫來處理許多常見的開發任務,使用者不必為了編寫簡單的 Web 伺服器或解析電子郵件而弄清楚如何下載和安裝單獨的包。
但隨著時代的變遷,PyPI(née Cheeseshop)、setuptools 和 pip 的引入,下載和安裝包變得簡單直接。Python 如今也擁有了豐富而充滿活力的第三方包生態系統。另一方面,Python 的標準庫堆滿了雜亂無章的、不必要的功能重複和可有可無的特性。基於此,官方認為:
- 任何額外的模組都會增加 Python 核心開發團隊的維護成本。團隊資源有限,減少的維護成本可以騰出開發時間用於其他改進。
- 標準庫中的模組通常受到青睞,並被視為問題的實際解決方案。大多數使用者只有在有令人信服的理由時才會選擇第三方模組來替換 stdlib 模組,例如, 用
lxml
替代xml
。刪除未維護的 stdlib 模組增加了社群貢獻的模組被廣泛使用的機會。 - 一個精簡的標準庫有利於資源有限的平臺,例如只有幾百 KB 儲存空間的裝置(如 BBC Micro:bit)。BeeWare 或 WebAssembly(如 pyodide)等行動平臺上的 Python 也因下載量減少而受益。
此 PEP 中被棄用的模組要麼是因為它們的移除是最沒有爭議的,要麼是最有益的。例如,爭議最小的有 30 年前的多媒體格式,如 sunau 音訊格式,在 80 年代末期被用於 SPARC 和 NeXT 工作站。crypt
模組具有根本缺陷,可以在標準庫之外更好地解決。
此外,該 PEP 也指定了一些模組為未計劃刪除的模組。有些模組已經被廢棄了幾個版本,或者乍一看沒有必要。然而,將這些模組保留在標準庫中是有好處的,這主要是針對那些不能從 PyPI 安裝軟體包的環境;包括 ftplib、optparse、 getopt 以及 wave 模組。
CPython 核心開發人員 Gregory P. Smith 在批准 PEP 的討論執行緒中,PEP-594 從 Python 標準庫中刪除了一組沒有爭議的、非常老的、沒有維護的或過時的庫。Python 指導委員會希望這個 PEP 是個一次性事件,而未來的廢棄將以不同的方式處理。
「解決圍繞我們如何長期定義 stdlib 的持續討論並不妨礙這個 PEP。對我們來說,每隔幾個版本就對 stdlib 的內容進行一次定期審查似乎是值得的,這樣我們就可以避免積累這麼多的 dead batteries,但這超出了這個特定 PEP 的範圍。」