Python 2 將在 2020 年壽終正寢。
Python 2 的報(bào)廢(EOL)日期遲遲未到,不過(guò)現(xiàn)在終于有了眉目。
自 2020 年 1 月 1 日起,Python 2 將不再得到支持。
Python 的核心開發(fā)人員將不再提供錯(cuò)誤修復(fù)版或安全更新。
因此,如果你仍在使用 Python 2.x,是時(shí)候?qū)⒋a移植到 Python 3 了。如果你繼續(xù)使用未得到支持的模塊,可能危及貴企業(yè)及數(shù)據(jù)的安全性,因?yàn)闊o(wú)人修復(fù)的漏洞遲早會(huì)出現(xiàn)。
問題的嚴(yán)重性
下面這張表列出了十個(gè)流行的 Python 軟件包及統(tǒng)計(jì)數(shù)據(jù),來(lái)自 Python 社區(qū)開發(fā)和共享的軟件的存儲(chǔ)中心 Python Package Index。
表中每個(gè)軟件包每月下載量達(dá)數(shù)百萬(wàn)次。本文中的數(shù)據(jù)來(lái)自 2019 年 6 月。
正如你所見,大多數(shù)下載的軟件包仍針對(duì) Python 2.x 版本。在最好的情況下,Web 應(yīng)用程序框架 Flask 主要是針對(duì) 3.x 而下載的。但即使如此,仍有近三分之一的下載仍針對(duì) 2.x.
即使這些下載中只有一部分用于實(shí)際項(xiàng)目,Python 2 報(bào)廢仍可能影響數(shù)百萬(wàn)系統(tǒng)的安全性。
Python 2 消亡帶來(lái)的問題
Python 2 報(bào)廢帶來(lái)了許多問題,這里是你可能會(huì)遇到的幾個(gè)問題。
依賴項(xiàng)
NumPy、Requests 和 TensorFlow 等許多大受歡迎的項(xiàng)目承諾到 2020 年將停止支持 2.x,一些項(xiàng)目已經(jīng)這么做了。
這意味著如果你想使用青睞的模塊的最新功能,需要使用 Python 3。等待更新的時(shí)間越長(zhǎng),到時(shí)將更改的依賴項(xiàng)的 Python 3 版本會(huì)越多,更新起來(lái)會(huì)變得越困難。
你可能阻礙其他開發(fā)人員
如果你在維護(hù)其他開發(fā)人員依賴的庫(kù),可能會(huì)阻止他們更新到 3。如果阻礙其他開發(fā)人員,你在間接、可能無(wú)意中加大其他項(xiàng)目面臨的安全風(fēng)險(xiǎn)。
你也許不在貴公司外面發(fā)布任何代碼,但要考慮可能也在內(nèi)部使用你代碼的同事。、
你錯(cuò)失最新功能
Python 3 有許多你錯(cuò)失的新功能,包括如下:
-
來(lái)自表達(dá)式的好處 —— 允許生成器將其操作的一部分委托給另一個(gè)生成器。
-
統(tǒng)一編碼字符串 —— 統(tǒng)一編碼處理起來(lái)更容易。
-
打印函數(shù) —— 打印函數(shù)有額外的功能,因而使其更靈活。
-
視圖和迭代器取代列表 —— 一些眾所周知的 API 不再返回列表。比如說(shuō),字典返回鍵的視圖、值的視圖或兩者的視圖。
-
“multi-with” 語(yǔ)句 —— 復(fù)雜的 with 語(yǔ)句更易于閱讀。
-
使用 * 和 ** 解包 —— 擴(kuò)大了 * 可迭代解包運(yùn)算符和 ** 字典解包運(yùn)算符的用途。現(xiàn)在可以在函數(shù)調(diào)用中使用任意數(shù)量的解包運(yùn)算符。
-
純關(guān)鍵字實(shí)參 —— 允許實(shí)參出現(xiàn)在可變長(zhǎng)度(varargs)實(shí)參的后面。
-
F 字符串 —— 運(yùn)行時(shí)評(píng)估的一種新類型的字符串常量,可能含有任何有效的 Python 表達(dá)式。
-
大量的加速和優(yōu)化機(jī)制。
Python 3.0 發(fā)布時(shí),一些新功能向后移植到 Python 2.7,可能很熟悉。如果你一直堅(jiān)持使用 2.6 或更低版本,這些新功能對(duì)你來(lái)說(shuō)可能很陌生。
遷移指南 | 幫助開發(fā)人員
將 Python 2.x 代碼移植到 Python 3 可能是很艱巨的過(guò)程。幸好,一些工具和資源可以使這個(gè)過(guò)程較容易。
Can I Use Python 3
這個(gè)程序可檢查你的項(xiàng)目依賴項(xiàng),看看有沒有依賴項(xiàng)在阻止你使用 Python 3。使用該程序來(lái)查看你是否需要換掉任何使用 Python 2.x 的庫(kù)。在這種情況下,有必要訪問該庫(kù)主頁(yè),看看是否有計(jì)劃移植到 3。
2to3
這個(gè) Python 程序試圖將 2.x 源代碼轉(zhuǎn)換成 3。它通常與 Python 解釋器一起安裝為腳本。如果你只想看看它對(duì)源代碼進(jìn)行的每次變更有何差異,不用編寫任何更改就可以運(yùn)行該程序。注意這不完美,你可能仍需要手動(dòng)修復(fù)一些代碼。
《支持 Python 3:深入指南》
這份免費(fèi)的開源電子書可指導(dǎo)你逐步完成添加 Python 3 支持的過(guò)程。本電子書解釋了你可能遇到的一些常見遷移問題,并列出了使用 Python 3 中的新功能改進(jìn)源代碼的方法。
Six
是一個(gè) Python 2 和 3 兼容庫(kù),讓開發(fā)人員方便編寫與 Python 2 和 3 都兼容的代碼。使用該庫(kù),開發(fā)人員可以選擇使用哪個(gè)版本的 Python 解釋器來(lái)運(yùn)行代碼。如果你決定使用該庫(kù),確保代碼表明了這一點(diǎn):Python 版本號(hào)可能很快增加到 4.0(截至本文發(fā)稿時(shí)最新版本為 3.7.4)。
利用他人的經(jīng)驗(yàn)來(lái)幫助你
—— 很多人已講述了移植代碼庫(kù)方面的經(jīng)驗(yàn)。Dropbox 在 2018 年將代碼庫(kù)遷移到 Python 3,撰寫了一篇博文詳細(xì)介紹了經(jīng)驗(yàn)。
Python 官網(wǎng)
還提供了你可能覺得有用的說(shuō)明文檔。
另一種選擇
如果無(wú)法將代碼庫(kù)遷移到 Python 3,另一種選擇是出錢請(qǐng)商業(yè)公司為你支持 Python 2。
至少有一家公司已經(jīng)宣布推出 Python 2 支持軟件包和 Python 2 第三方軟件包。
一些 Linux 發(fā)行版包含 Python 2,報(bào)廢后仍會(huì)得到支持。比如說(shuō),CentOS 7 和 Debian 10 都使用 Python 2,一直支持到 2024 年,但不知道到時(shí)這種支持是什么樣的。
改進(jìn)的機(jī)會(huì)
維護(hù)是任何軟件開發(fā)生命周期(SDLC)的重要環(huán)節(jié)。該環(huán)節(jié)的一方面是改進(jìn)軟件性能、增強(qiáng)安全性,這兩者都可以通過(guò)升級(jí)到 Python 3 來(lái)實(shí)現(xiàn)。
換句話說(shuō),如果你仍在使用 Python 2,這正是改進(jìn)你如何管理軟件依賴項(xiàng),并盡量減少安全債務(wù)的大好機(jī)會(huì)。
不要忽視風(fēng)險(xiǎn)
我們 NCSC 始終強(qiáng)調(diào)打補(bǔ)丁的重要性。打補(bǔ)丁并非總是易事,但這是你為了確保技術(shù)安全所能做的最基本工作之一。
WannaCry 勒索軟件就是一個(gè)典例,它表明了如果你運(yùn)行不受支持的軟件會(huì)發(fā)生什么。它感染了超過(guò) 230000 臺(tái)計(jì)算機(jī),在全球范圍內(nèi)重大破壞。最近,Equifax 泄密事件導(dǎo)致高達(dá)達(dá) 7 億美元的和解。
如果決定報(bào)廢后繼續(xù)使用 Python 2,你就接受了使用不受支持的軟件帶來(lái)的種種風(fēng)險(xiǎn),卻明知道可以使用安全的版本。
但愿本文有助于說(shuō)服你現(xiàn)在是時(shí)候開始遷移到 Python 3 了。
作者:
Rich M (英國(guó)國(guó)家網(wǎng)絡(luò)安全中心(NCSC)的平臺(tái)安全研究員)
出處:lupaworld
文章出處:http://www.lupaworld.com/article-273014-1.html
今日推薦