簡說Python生態系統的14年演變

追憶MHyourh發表於2019-03-17

【導語】Python 裡各種豐富的標準庫、第三方庫和模組成為其廣受歡迎的原因之一。而 PyPI 就是大家想第三方庫前先要安裝的一個倉庫。作為使用者,它可以幫我們查詢 Python 社群開發和共享的軟體;而作為開發者,可以用 PyPI 分發自己的軟體。從 2003 年建立 PyPI 到現在,整個社群又是如何發展的?現狀如何?有哪些有趣的發現,本文將與大家一起進行初步探索。

構建 PyPI 映象一件非常酷的事情就是讓我掌握了很多的資料。至此,我決定探索一下自 2003 年建立 PyPI 以來,整個生態系統發生了怎樣的變化。不過,接下來大部分的分析都是始於 2005 年,這一年 PyPI 新增了 upload_time 。

下圖展示了2005-2018 年活躍的 Python Packages 數量,藍色表示 Old Packages,橙色表示 New。

在這十四年間,Python 的生態系統一直在穩步增長。隨著 PyPI 在 Python 社群幾乎被完全接受,在那幾年裡持高速增長。之後活躍 Packages 的數量每年增長 28% 到 48%(活躍 Packages 指的是已經發布過一版或釋出了新版本)。

在這14年的時間裡,Python的生態系統一直在穩步增長。對於PyPl而言,在它被Python社群幾乎完全接受的那幾年裡持高速增長狀態, Packages (至少更新過一個版本或剛剛上線的)數量也在活躍增長,年複合增長率可達28%至48%。

img

如圖所示,66%的Packages是新發布的,其中絕大多數不會持續維護;持續一年以上維護的Packages還是保持強勁增長;每年新上線的Packages增幅在31%~59%,儘管增速有所減緩,但勢頭不減。這意味著,整體上看,Packages正釋出著越來越多的版本,預示著PyPl變得越來越成熟。

img

結果最令我吃驚的是,每個Packages的釋出數量。此前我一直靠個人經驗,升級Packages依賴庫,例如 AWS 的 #15 botocore,但是 ccxt 庫 的“脫穎而出”是我沒想到的。在不到兩年的時間裡,ccxt 已經發布了 4659 個版本,釋出數量比其他的 Packages 的 3 倍還多。但是當我在嘗試載入它的時候, libraries.io 頁面的載入時間要 30 多秒,所以,我也不確定它的維護是好還是壞,但是真的是讓人印象非常深刻!

另外一個有趣的發現是分發 Packages實踐上的變化。最大的變化是 Python 3 的釋出。Binary Wheels 於 2012 年被引入並編入 PEP 427,被普遍認為是分發 Python Packages 的最佳方式,但 Packages 作者的接受週期還需要時間。Python Wheels 可以跟蹤 PyPI 360 個 Packages 的採用情況,如下圖:

img

(圖片來源:pythonwheels.com/)

並不是每個 Packages 都將作為 wheel 釋出,特別是 psycopg2 馬上就要停止釋出了,其捆綁的 LibSSL 和系統自帶的 LibSSL 間有衝突,不過這種情況並不常見,所以希望未來可以有更多的 Packages 被作為 wheel 分發,保持現在的強勁勢頭,可以達到 90% 乃至更多。如果按照下面圖中趨勢的發展,也許 2022 年就可以實現了。

img

相關文章