當前位置:
首頁 > 知識 > 5千萬的 Twisted 下載量是不會錯的

5千萬的 Twisted 下載量是不會錯的

小編註:嗯~上次懟Python核心團隊,說標準庫是「漏電的電池」的人,也是twisted團隊的,怨氣有點點重啊~

(此處已添加圈子卡片,請到今日頭條客戶端查看)

你知道的——能有5千萬下載量的任何東西肯定是很不錯的。但是,當查看Twisted的下載量時,確實有些地方出了問題——即使它已經有超過5億的下載量。

在2019年Python語言峰會上,有人告訴我應該放棄對Python 2的支持。

「Van Rossum認為,如果Twisted團隊想讓生態系統進化,他們應該停止支持舊的Python版本,並強迫用戶升級。Brown承認這一點,但是他說有一半Twisted用戶仍然在使用Python 2,拋棄他們是艱難的。

我認為有必要仔細研究一下為什麼很難放棄他們。

關於統計數據和其他謊言的簡短說明

我說的是「一半的Twisted用戶」。這可能誇大或低估了實際數字,我們很快就會看到。我使用PyPI下載量作為一個採用的指標,因為Twisted不會自動通報,而且我也無法知道諸如Twisted的Debian或Red Hat包之類的東西的相對滲透率。

這是不幸的,但我可以對發行包的用戶做一些假設:

  • 有些人可能在使用一個使用了Twisted的應用程序,他們並不算我所說的「用戶」,因為我是在計算開發人員(庫的用戶),而不是最終用戶
  • 幾乎可以肯定,他們使用的是不支持Python3的舊版本,所以我們可以假設他們通常是Python2的用戶。
  • 他們是幾年後才會看到當前版本影響的用戶,所以對新版本的採用肯定會落後。

因此,我們可以從這樣的假設開始,:使用發行版打包的Twisted的任何Twisted用戶更有可能都在使用Python 2,並據此估計對我們的結論進行加權。

分析下載次數

PyPI發布了下載統計數據。如果我們查看一個合理的樣本集(過去30天的下載次數),我們會得到一些有趣的數字:

5千萬的 Twisted 下載量是不會錯的

我們可以清楚地看到,Python 2.7是Twisted最流行的平台,其次是Python 3.6和Python 3.7。Python 3.4(當前版本不支持的一個Python版本)和Python 3.5正在被淘汰,但是這些舊平台的用戶數量仍然有當前Python穩定版本的一半。Python 3.8(目前處於beta版)實際上是一個舍入錯誤(正如預期的那樣)。

Python3版本的總下載量只有Python2.7單個版本下載量的一半多。

這些版本採用數字看起來相當可怕,但並不能說明全部情況。如果我們看看特定的版本呢?

Libraries.io指出Twisted的前兩個固定版本是17.9.0和13.2.0(我的第一個RM版本!)。如果我們查看這兩個版本以及當前版本 (19.2.1—因為它發布還沒有30天,所以我將查看19.2.0) 的統計數據,我們就會發現一些有趣的數字:

5千萬的 Twisted 下載量是不會錯的

注意: "%佔比"是Twisted版本在過去30天的下載佔比。

Twisted在過去30天內的安裝情況顯示了那些使用新Twisted版本,也使用新Python版本的人。不過,目前相當一部分Twisted用戶仍然使用Python 2.7。

儘管情況正在改善(在當前的Twisted版本是18.9時,Python 2.7的下載量約有47%),但Python 2用戶仍然是Twisted安裝基礎的重要組成部分。可以這樣說,Twisted不需要擔心總下載量的66%,而我們實際上應該關注19.2版本的37%——但是37%仍然是一個令人擔憂的數字。

Twisted 是長尾理論

Twisted還沒有完全移植到python3。這有幾個原因——開發人員的時間、開發人員的興趣和可行性。

開發人員的時間不是自由的。Twisted目前幾乎完全是一個志願者項目,只有幾個小時的帶薪時間,人們才能證明僱主在代碼庫上的花費是合理的。對許多僱主來說,很難創建一種事例使Twisted能在所有的Python3平台上運行,所以就選擇Python2.7。它可能並不漂亮,也沒有語法上的細微差別,但是結合了一個已建立的Twisted代碼庫(這已經為在Python 2中可靠地實現它付出了代價),它也可以正常工作。在async/await之前,還沒有任何「殺手級特性」能夠吸引Twisted用戶使用Python 3。這隻意味著更多的工作(因為即使是Unicode-clean的代碼庫也需要花費很多人的時間來進行移植)和更慢的運行時。

即使在今天,一個Python 2 + 3兼容的Twisted應用程序(如Synapse)從Python3獲取的唯一的好處也只是靈活的字元串表示(在處理Unicode時節省內存),而且Python 3對迭代器的普遍使用 (主要指的是標準庫中的改進變得lazy,而不是你自己的代碼)。當然,這很好,但是漸進式的改進並不是你獲得升級的方式。

Twisted本身也花了很長時間才得以移植,這在庫的生態系統中產生了一個連鎖反應。Python2到3的升級從來沒有在Twisted中起過作用,直到Python 3.3(2012年—— 3.0版本四年後),對Twisted向一個2+3兼容的代碼庫的開發才開始。即使在我的努力下(從2013年開始),也直到2016年或2017年Twisted才能夠被合理地移植到許多應用程序中。有些部分(如IRC支持)還沒有被移植,這意味著使用它的軟體在移植過程中會被進一步推遲。

要做些什麼?

當前存在的問題將Twisted置於一個有趣的狀況中。

我們基於Python 2.7的用戶群可能不會很快遷移到Python 3。只要發行版提供了Python 2.7,那Python 2 的結束支持日期就只是象徵性的,對於許多應用程序來說,把精力放在對已經運行且運行良好的東西的移植上可能根本不值得——即使移植在理論上很容易。這意味著Twisted需要應對採用Python 3的長尾問題。

Van Rossum的評論有幾分道理。這些用戶升級的唯一方式是被迫升級。我擔心他們不會升級到python3,他們會「升級」到Go、Rust或其他一些語言。我過去幾年的個人經驗是,這種情況比人們想像的要普遍得多。許多公司都願意投資於用一種更好的語言進行全新重寫的可能性,而不願意支付現有軟體的遷移成本。儘管我們知道重寫幾乎總是毫無意義的愚蠢行為,但它仍然在發生。我寧願不把這個最後通牒強加給我的用戶,因為他們最終可能不會添加到生態系統中,而是會因為一開始就決定使用Python而感到痛苦。

因此,我覺得Twisted需要採用從Python 2遷移過來的一種減少危害的方法。

我在Twisted郵件列表中發布了一個建議,詳細說明了我對這樣一種方法的建議。它假設Python 2的用戶是其它領域的長尾用戶,不太可能採用新特性,因此發布一個針對2.7的最終版本(可以單獨修補)可能是一個選項。

我知道社區中有幾個人(例如Glyph:)反對發布一個Twisted的長期支持版本,可能說的就是目前這種情況。但是,如果我們不能完全放棄對Python 2.7的支持,那麼一個「LTS」版本的維護負擔最終可能會比在當前的Twisted版本中保持對Python 2.7的兼容性要低。

但是,最後……

作為一個開源維護者,很難說我對那些使用我的軟體的人沒有什麼責任。也許這種責任感是錯誤的,Twisted維護者應該停止維護那些到目前為止對開始學慣用Python編程來說已經太舊的軟體。這使得維護者很難決定是否將用戶拋棄(即使他們確實應該升級),特別是那些可能沒有可行的升級選項的用戶。

無論如何,這些個人情感都無關緊要。我只是一個發布經理,而不是整個Twisted團隊——並且我們一致認為現在還不是拋棄Python 2.7的時候。無論我們怎樣做到這一點,我們的用戶付出的代價仍然太大。


英文原文:https://atleastfornow.net/posts/py2-py3-twisted-downloads/

譯者:Nothing

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

雖然Python「內置電池」,但是電池正在漏電--Amber Brown
Python中Scikit-Learn庫的分類方法總覽

TAG:Python部落 |