Python 社區有一個比較獨特的概念是“內置電池”(Batteries Included),指的是 Python 自帶豐富多樣的標准庫,開箱即用,動力十足。根據官方文檔顯示,Python 內置了 200 多個標准庫,它們對於 Python 的流行功不可沒。
但是,Python 已經發展了 30 年,很多標准庫已經過時了,已經在“漏電”了,這對於語言的發展來說,並不是一件好事。
在 2019 年的官方 PyCon 大會後,PEP-594 被提了出來,旨在為標准庫動一次“手術”,剔除掉質量差、功能落後、代碼過時的標准庫,讓 Python 保持輕量高效,持續煥發生機活力。
當時,貓哥得知了這一消息,興致沖沖地寫了一篇文章《聊聊 Python 的內置電池》(點擊閱讀),向廣大 Python 開發者傳達了這一個好消息。
當時,PEP-594 正處於草案狀態,沒想到一晃就是三年,如今這個 PEP 終於是被接受了!
從 3.11 版本到 3.13 版本,Python 內置電池的“瘦身手術”將會進行。
讓我們祝願它變得越來越好,越來越健康!
由 Python 貢獻者 Christian Heimes 和 Brett Cannon 提出的一項,從 Python 標准庫中刪除過時的和未維護的模塊的 Python Enhancement Proposal (PEP) 594 已被批准通過。該提案最初於 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 的范圍。”