雖然Python「內置電池」,但是電池正在漏電--Amber Brown
Twisted項目組的Amber Brown分享了她對Python標準庫的批評。事實證明,這是當天最具爭議的話題,在問答環節中,Guido van Rossum怒氣沖沖地離開了房間。
應用程序需要的不僅僅是標準庫
Python聲稱功能齊全,但Brown表示,如果沒有外部包,它「用處不大」。例如,asyncio需要外部庫才能連接到一個資料庫或使用HTTP。Brown斷言,從標準庫到PyPI有許多這樣的依賴關係:typing與mypy運行效果最佳,ssl模塊需要一個monkeypatch來連接到非ASCII域名,datetime需要pytz庫, 並且six庫對於編寫Python 2和3代碼都是必需的。
其他標準庫模塊比PyPI上的替代模塊差得多。http.client文檔建議讀者使用Requests,並且與arrow、dateutil和moment等競爭對手相比,datetime模塊令人困惑。
質量差,功能落後,代碼過時
「Python的電池正在漏電,」 Brown說道。她認為標準庫中的一些bug永遠得不到修復。即使這些bug得到了修復,像Twisted這樣的PyPI庫也不能假定它們能在最新的Python上運行,因此它們必須永遠保留它們的bug工作區。
有許多模塊很少有應用程序會使用,但是沒有方法來安裝該標準庫的子集。Brown特別指出了XML解析器和tkinter使標準庫變得更大、更難以構建,因為少數程序員的緣故增加了所有程序員的負擔。正如Russell Keith-Magee當天早些時候所描述的,標準庫的大小使得PyBee很難在受限制的設備上運行Python。Brown還指出,一些標準庫模塊用C語言針對python3進行了優化,但是必須用純Python重新實現,以便PyPy支持它們。
Brown發現一些新的標準庫特性「太少、太遲」,使得用戶不得不依靠backports來在Python 2中使用的這些特性。例如, socket.sendmsg是最近才添加的,這意味著Twisted必須提供自己的C擴展才能在Python2中使用sendmsg。儘管Python2的生命周期已經接近尾聲,但Brown說道,這隻適用於核心開發人員,而對於用戶來說,Red Hat和其他發行方將繼續保留Python2「直到該死的末日來臨」。Brown還提到一些itertools代碼在文檔中是以示例顯示的,而不是作為itertools模塊中的函數提供。
坐在房間後面的Guido van Rossum這時打斷了她的話,他說道:「你能不能只談一個話題?我很抱歉,但這只是一個冗長而曲折的咆哮。你的觀點是什麼?」 Brown回答說,她的觀點是,標準庫存在很多問題。
標準庫模塊排擠創新
Brown自己認為,最具爭議的觀點是,在標準庫中添加模塊會打擊程序員使用或參與與之競爭的PyPI包的積極性,從而扼殺創新。自從asyncio發布以來,她就不得不解釋為什麼Twisted仍然是值得使用的,並且,現在標準庫中有了數據類,而Hynek Schlawack就必須捍衛他的attrs包。即使標準庫模塊排擠了其他項目,它們也會落後於其他項目。根據Brown的說法,「標準庫是代碼有時會死亡的地方」,因為在那裡貢獻代碼是困難和緩慢的。她感謝最近的改進,尤其是來自Mariatta Wijaya的努力,但是對Python做出貢獻仍然比PyPI包難。
「所以我知道這基本上確實是一種咆哮,」她總結道,「但這完全是有針對性的。」
討論
Nick Coghlan將Brown的提議解釋為擴大「ensurepip」模型的應用,以確保某些包總是可用的,但是可以與標準庫分開升級,他認為這是合理的。
Van Rossum則不那麼確信。他又問到:「Amber,你的觀點什麼?」Brown說她的目的是將asyncio和大多數新特性開發一起遷移到PyPI。「我們應該擁抱PyPI,」她勸誡道。她承認,Javascript等一些生態系統過於依賴包,但也有一些像Rust這樣的生態系統擁有小型標準庫和高質量的包存儲庫。她認為Python應該向這個方向邁進。
相反,Van Rossum認為,如果Twisted團隊想讓Python生態系統進化,他們應該停止支持舊的Python版本,並強制用戶進行升級。Brown承認這一點,但是她說有一半Twisted用戶仍然在使用Python 2,拋棄他們很難。在這一話題上的辯論變成了針對Van Rossum個人,他憤怒地離開了。
Nathaniel Smith評論道:「我注意到這裡有些緊張」。他猜測,Brown和核心團隊在過去互相討論過,因為核心團隊與其他Python程序員有不同的關注點。Brown進一步補充說,由於很少有Python核心開發人員同時也是庫的主要維護者,所以庫作者的抱怨會被貶低或忽略。
剩下的核心開發人員繼續進行了技術討論。Barry Warsaw說,核心團隊已經討論了標準庫中的棄用模塊,或者用它的子集創建一個輕量級發行版,但是這需要進行仔細的設計。其他人反對說,精簡標準庫可能會破壞下游代碼,或者會給那些信任標準庫而不信任PyPI的企業程序員帶來大量工作。
Pablo Galindo Salgado擔心將模塊從標準庫遷移到PyPI會導致測試配置的激增。但是在Brown看來,「我們已經在這樣做了。」一些Linux和Python發行版已經有選擇性地支持特性和修復漏洞,這導致了一組比核心團隊意識到的複雜得多的配置。
A. Jesse Jiryu Davis於2019年5月18日上午09:29:00發布
英文原文:https://qiniumedia.freelycode.com/vcdn/1/優質文章長圖3/python_battery_link.pdf
譯者:憂鬱的紅秋褲


TAG:Python部落 |