R.I.P Python 2.x:儘管風靡一時 但現在它要落幕了

距離 Python 2.7 退休還有 4 個月 1 天 3 小時,在 Pythonclock 網站上,倒計時的數字在動態變化着。近日,英國國家網絡安全中心(NCSC)建議開發者放棄使用 Python 2 。隨着 Python 2 生命週期截止日(2020年1月1日)的迫近,英國國家網絡安全中心(NCSC)擔心繼續使用不受支持的模塊存在數據安全的風險,因爲 Python 核心開發人員即將不再提供該版本的安全更新。儘管用戶仍可選擇向第三方付費繼續使用 Python 2 ,但目前已有許多項目停止了對 Python 2 的支持(包括TensorFlow、Requests、scikit-learn、Apache Spark、pandas等等)。所以,Python 2.x 的用戶們,是時候將目光轉向 Python 3 了。

自 2008 年發佈以來,Python 2.0 已經走過了十多個年頭。它的最後一次重大更新 Python 2.7 是在 2010 年。Python 2.x 是一個優異的語言版本,但與此同時也帶來了相當大的歷史包袱。lexy munroe 在博客中悉數列舉了它的缺陷,“ 例如,它有兩種整數類型;存在惱人的 Unicode 編碼問題;它混淆了懶惰和渴望的功能工具;它有一個標準的庫,但加載內存非常龐大;它自詡的強類型,卻有偶爾令人啼笑皆非的運算結果 None < 3 < “2”。總的來說,它的一些“陰暗角落“,包含了 Python 1 時代太多的歷史包袱。“

由於修復這些問題可能會破壞現有代碼,而幾乎所有爲 2.0 編寫的代碼仍可在 2.7 上運行。因此,一個不太兼容的新版本 Python 3 應運而生。設計之初,Python 3 的預期是用戶會直接轉移到新版本,從而放棄使用 Python 2 。而實際上,大多數的庫希望同時在 Python 2 和 Python 3 上運行,這在一開始很難運作。衆多周知,Python 社區對變革的抵抗力總是很強。 Python 3.0 在 2008 年 12 月發佈後,花了整整四年時間,直到 2013 年 1 月,它的月下載量才超過 Python 2 。

意識到許多用戶仍在使用 Python 2 ,Python 的開發人員已經將對 Python 2.7 的支持從 2015 年延長到了 2020 年。由於開發人員僅修復錯誤,並把所有新功能僅限在 Python 3 上使用,許多項目已經減少了對 Python 2.7 的支持。

現在, PyPI 的大部分流行軟件包都可以在 Python 2 和 3 上運行,而且每天都會添加新的軟件包。此外,許多關鍵的 Python 項目已承諾將盡快停止對 Python 2 的支持。

停止支持 Python 2 的項目時間表

Python 各分支的狀態

根據 JetBrains Python 開發者調查,絕大多數用戶(84%)已經改用 Python 3 。其中, 54% 使用 Python 3.6 , 30% 使用 Python 3.7 。

看起來,結論似乎顯而易見,你應該開始使用 Python 3 了 ,因爲它纔是 Python 的未來!

然而,事實上,對 Python 版本的選擇取決於公司的實際應用情況。目前仍有不少銀行和金融公司使用 Python 2.7 。去年,當 Python 宣佈 Python 2 將於2020年正式結束時,Hacker News 用戶就曾表示業內數百萬人仍在使用 Python 2.7 。

讓我們再看一組最新數據,根據  Python Package Index 的調查結果,在十大流行 Python 包中,前四個軟件包的 Python 2 下載量比 Python 3 還要大,甚至 Python 3 更受歡迎的大部分軟件包仍適用於 Python 2 。

本月早些時候, PyPy 表示,只要 PyPy 存在,他們就不打算放棄對 Python 2.7 的支持。外媒 Packt Hub 解讀,這種對 Python 2 的偏愛不僅僅是因爲 PyPy 的第一個版本是 Python 2 實現, Python 3 最近才進入這一版本,這也是 PyPy 生態系統的關鍵部分,RPython 是一個動態語言實現框架,它的基礎就是 Python 2 。

因此,Python 2 的離場也會帶來一些問題。英國國家網絡安全中心(NCSC)研究員 Rich M 在官方博客中總結出以下幾點:

1.依賴項

正如前文所說,像 Numpy , TensorFlow 這樣的流行項目已經承諾 2020 年停止支持 Python 2.x 。這意味着如果你想使用你喜歡的模塊的最新功能,就必須使用 Python 3 。等待更新的時間越長,更改的依賴項的 Python 3 版本就會越多,更新就會更困難。

2.可能阻礙其他開發人員

如果你維護其他開發人員所依賴的庫,則可能會阻礙其更新到 Python 3。這意味着你在無形中增加其他開發人員的安全風險。你也許不在組織外部發布任何代碼,但要考慮可能在內部使用你的代碼的同事。

3.錯過新功能

Python 3 有許多 Python 2 用戶沒有嘗試過的新功能,包括:

  • 表達式的好處:允許生成器將其部分操作委託給另一個生成器。
  • Unicode字符串:Unicode更易於處理。
  • 打印函數: 打印函數有額外的功能,能使其更加靈活。
  • 視圖和迭代器而非列表:一些衆所周知的 API 不再返回列表。例如,字典返回鍵、值的視圖或二者的視圖。
  • “multi-with“語句:複雜的“with”語句更容易閱讀。
  • 使用*和** 解包:擴展使用* 可迭代解包運算符和**字典解包運算符。現在可以在函數調用中使用任意數量的解包運算符。
  • 關鍵字實:允許實參在 varargs 實參後出現。
  • F字符串:在運行時計算的一種新類型的字符串常量,可包含任何有效的 Python 表達式。
  • 大量的加速和優化

英國國家網絡安全中心(NCSC)近日將現有應用程序中的安全風險和可能發生的代碼破壞列爲用戶需要儘快棄用 Python 2 的主要原因。該機構警告說,那些不爲遷移到 Python 2.x 投資的公司最終可能面臨和 Equifax 或 WannaCry 同樣的處境。“在知道有可用的安全版本的情況下,仍鋌而走險,決定在生命週期結束後繼續使用 Python 2 ,您將需要承擔使用不受支持的軟件帶來的所有風險。”

爲了方便用戶過渡, Python 團隊也提供了各種信息豐富的指南。(例如:Porting Python 2 Code to Python 3Should I use Python 2 or Python 3 for my development activity?)但無論如何, Python 2.x 仍有一羣忠實粉絲。現在,是他們該做出選擇的時刻了。

相關文章:
Time to shed Python 2
UK cybersecurity agency warns devs to drop Python 2 due to looming EOL & security risks

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章