溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

關(guān)于Python 2的發(fā)展趨勢分析

發(fā)布時間:2020-08-05 10:52:32 來源:億速云 閱讀:140 作者:清晨 欄目:編程語言

小編給大家分享一下關(guān)于Python 2的發(fā)展趨勢分析,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

很負責任地告訴你,你可以放棄 Python 2.0 版本了,因為 Python 3 簡直棒極了。當然,如果你能把項目從 Python 2 轉(zhuǎn)移到 Python 3,那就更好了。盡管 Python 3 大受贊揚,但如何將 Python 2 中大量的應(yīng)用“遷移到 Python 3 中這個問題一直困擾著技術(shù)人員們,這篇文章就為你答疑解惑。

Python 2 即將退出歷史舞臺

Python 3 已經(jīng)發(fā)布十年了。Python 2 的產(chǎn)品壽命結(jié)束時間最初被設(shè)定為 2015 年,但是它被延長到了 2020 年 1 月 1 日——原因是 2013 和 2014 這兩年間,人們還沒做好準備將項目“遷移”到 Python 3 上。Python 3.0 幾乎無法使用,Python 3.1 和 3.2 比 Python 2 運行慢。造成這種問題的根源在于許多第三方庫仍然使用 Python 2。直到 2012 年,200 個最常用的 Python 包中僅有一半遷移到了 Python 3 上,而到了 2018 年,仍然只有 95% 左右的 Python 包被遷移過來,這還都是些人們最常用的 Python 包,至于那些不太常用或不流行的,就更無人問津了,所以最后壽命結(jié)束期限又延長了 5 年。這 5 年中,Python 3 的變化不可同日而語。Python 3(3.6 及以上版本)的最新版本不僅運行速度快而且功能豐富。

為什么仍然有一些 Python 2 項目?

從業(yè)務(wù)的角度來看,遷移的成本太高了。作為開發(fā)人員,在過去的幾年里,我們編寫的每一行 Python 2 代碼都是一筆技術(shù)債。但大多數(shù)公司不是由開發(fā)者運營的。所有的商業(yè)決策都是經(jīng)理制定的,而他們的關(guān)注點是那些能為公司帶來業(yè)務(wù)價值的項目。事實上,一種在幾個月內(nèi)就會被淘汰的編程語言,不足以讓人為它花費時間重寫所有項目。將項目從 python2 遷移到 python3 是很昂貴的,而且這么做也不會給公司帶來更多價值。雖然它會為項目做些改進,但卻不會為產(chǎn)品添加任何新特性。

就像女人的衣柜永遠都少了一件晚禮服一樣,總是有一些新特性在等待著技術(shù)人員去開發(fā),總有一個緊急的漏洞需要修復(fù)。如果你是“敏捷開發(fā)”(因為現(xiàn)在人人都是敏捷開發(fā)),并且有一堆待辦事項,如果遷移到 Python 3 能排到待辦事項列表中,那也只能是最后一項。如果你是一家小型初創(chuàng)企業(yè),那么你需要的不是完美的、最新的代碼,而是要添加新功能并改善用戶體驗。

如果你是一家大公司,那么情況就不同了。如果遷移大量遺留下來的 Python 代碼(甚至有3500 萬行 Python 2 代碼)那絕對是一件讓人崩潰的事。更糟糕的是,如果這些代碼中有一些是已經(jīng)離職的前員工編寫的,幾乎沒有經(jīng)過測試,文檔也很差,老舊過時。但是這些代碼仍然能正常工作,只是沒有人知道它是如何工作的,多年來都沒人用過它們。在某種程度上,你將不得不重寫它,因此這些代碼一直“半死不活”地留在 Python2 中。

繼續(xù)使用 Python 2 的風險

我們來做個假設(shè)——時間快進兩個月,Python 2 徹底“退休”,所有人都在準備迎接 Python 3,而你只能面對著仍在 Python 2 上運行的生產(chǎn)代碼望洋興嘆。并開始思考:“最壞的結(jié)果是什么?”

結(jié)果就是——你可能被黑。當然了,在 Python 3 或其他任何編程語言上也可能被黑,但在 Python 2 上被黑的風險更大。沒有人會再更新 Python 2,更不會有人去修復(fù)里面的 bug。這還不是最糟糕的,更糟糕的是用戶要考慮正在使用的 Package,因為大多數(shù) Package 已經(jīng)放棄了其 Python 2 版本,明年一月將會有更多 Package 放棄 Python 2。那么,對 Python 2 的依賴越大,出現(xiàn)安全問題的可能性就越大。

即使軟件沒有任何安全問題,隨著時間的推移,它也會慢慢地開始崩潰。如果每次更新部分系統(tǒng)(更新系統(tǒng)保持安全),就會出現(xiàn)系統(tǒng)與新軟件不兼容的問題。也許一些開發(fā)人員會從 PyPI 中刪除他們的 Packages,那么最終的結(jié)果就是花越來越多的時間去填坑以使項目繼續(xù)運行。

Python 2 還有救嗎?

是不是只能眼睜睜看著 Python 2“壽終正寢”無計可施?我只能說,如果可以將項目遷移到 Python 3,那就這么做吧。因為遷移后得到的長期收益將遠遠超過遷移的成本。但是如果可以遷移,相信很多人早已那么做了,就不會閱讀本文了。所以我假設(shè)你不想遷移項目而是在尋找其他的解決方案,下面是我列出的 Python 2 項目其他解決方案,從我主觀出發(fā),按照解決方案難度排序:

· 什么都不做

你可以掩耳盜鈴,假裝 Python 3 不存在,忽略 Python 2 即將“壽終正寢”的事實。正如我之前提過的,不更新軟件,“執(zhí)著”地冒著數(shù)據(jù)泄露的風險繼續(xù)使用 Python 2,即使一些依賴項可能在某個時間停止工作也無所謂。但是,如果僅在計算機上運行的某種內(nèi)部腳本上使用 Python 2,而且它沒有依賴項,那么,什么都不做就是最好的解決方案。如果你的軟件可能明年就會過時,這時就要衡量下利弊再慎重決定到底要不要遷移。

· 凍結(jié)應(yīng)用狀態(tài)

對于那些你不用擔心安全問題的內(nèi)部工具,凍結(jié)應(yīng)用狀態(tài)是個不錯的解決方案(這里所說的“內(nèi)部”是指斷網(wǎng)狀態(tài))。但如果一些依賴項出現(xiàn)漏洞,那就麻煩了。明年依賴 Python 2 的項目就會開始出現(xiàn)問題,就像我上文提到的,人們會從 GitHub 甚至 PyPI 上刪除舊項目,你還記得刪除一個填充文本的庫結(jié)果所有構(gòu)建的代碼開始崩潰的烏龍事件嗎?那時候所有人都嘲笑了 JavaScript,那就做好準備迎接同樣的嘲笑吧,只是,可能都不會有人嘲笑你了,因為你所使用的是Python 的棄用版本。

幸運的是,我們還有 docker 和其他允許你創(chuàng)建 immutable containers 的工具。編寫一個使用 Python 2 作為基本映像的 Dockerfile。添加依賴項并將應(yīng)用設(shè)置成一個 docker 鏡像。將設(shè)置好的 image 推入公共或私人存儲庫。于是,你就擁有了一個帶有辦公應(yīng)用的 immutable container,你可以共享它并按照自己的用途使用它,而不必擔心某些依賴項不可用。它解決了內(nèi)部工具的大多數(shù)問題。現(xiàn)在能用就快使用吧,別等到 2020 年應(yīng)用開始出現(xiàn)各種問題時再使用就為時已晚了。

· 改變 Python 翻譯器

當我提及“Python 2 不再使用”時,我的意思是“CPython 2 不再使用”。CPython 是最流行的 Python 翻譯器,所以對于很多人來說,Python == CPython。但它不是唯一的翻譯器。例如,還有可以替代 CPython 的 PyPy。

那么,為什么不是所有人都使用 PyPy 呢?因為 PyPy 有一些限制。如果你的項目非常依賴 C 擴展,那么 PyPy 可能不適合你。但如果你切換到 PyPy,需要用測試來驗證是否所有程序正常運行,如果能夠運行,你的應(yīng)用程序甚至可能比以前運行得更快。不得不說,這是一個很好的“副作用”。

PyPy 不是唯一的選擇。Intel 保留了自己的 Python 發(fā)行版,稱為“Intel?Python 發(fā)行版”。這是一個支持 Python 的 2.7 和 3.6 的免費發(fā)行版。當我與一位該項目參與者交談時,他們表示不打算在近期內(nèi)棄用 2.7 版本。

· 商業(yè) Python 發(fā)行版

除上述方案外,還有商業(yè)解決方案。其中之一是 Red Hat Enterprise Linux (RHEL)。如果你購買了版本 8,直到 2024 年 6 月 Red Hat 將一直為你提供 Python 2 的支持服務(wù)。這就相當于為你在 Python 2 上多買了 4 年的 bug 修復(fù)和更新,代價就是從免費和開源的編程語言轉(zhuǎn)換到讓人付費使用他們發(fā)布的 Python。你也可以在網(wǎng)上找到其他 Python 2 付費版本供應(yīng)商。

· 構(gòu)建自己的 CPython 2

如果你不想花錢請任何人來修復(fù) Python 2,你可以自己做。你需要做的是:衍生 CPython 存儲庫,等待漏洞出現(xiàn),對它們進行修補,編譯自己的 CPython 版本,并在生產(chǎn)服務(wù)器上使用它。除非你清楚自己在做什么,否則這真的不是個好主意,因為誰都不希望在自己的服務(wù)器上引入漏洞。

項目遷移至 Python 3

如果以上選項都不適合你,那么你可能最終會還是會把項目遷移到 Python3。有兩種常見的方法可以做到這一點:跨代碼或?qū)?Python 2 代碼重寫為 Python 3。

· 跨代碼

跨行代碼的意思是同時使用 Python 2 和 Python 3 的代碼。這聽起來像是要做更多的工作,因為你需要同時支持兩個主要的 Python 版本,但是這樣會使轉(zhuǎn)換更容易—不會出現(xiàn) Python2 轉(zhuǎn)換到 Python3 過于突然的問題。首先在 Python 3 下運行測試(當然,大多數(shù)測試都會失?。?,然后不斷重寫應(yīng)用程序的各個部分,直到它能夠在 Python 2 和 Python 3 上工作為止。接下來要在生產(chǎn)環(huán)境中更改 Python 版本,最后刪除 Python 2 代碼。此方法最大的好處是你可以在迭代中完成此工作。您可以在遷移系統(tǒng)各個部分的同時不斷為代碼添加新特性,這種方法也是客戶喜聞樂見的。

· 將 Python 2 重寫為 Python 3

另一種選擇是用 Python3 重寫 Python2 的部分代碼。這個辦法輕松些,因為你不用再考慮 Python 2。典型的辦法是將應(yīng)用程序的 Python2 版本保持在生產(chǎn)環(huán)境中,在一個單獨的 git 中使用 Python3 版本。然后你要不斷地測試新版本,當它準備好時,你就可以放棄 Python 2,使用 Python 3 版本。如果有些程序還沒有測試就“滾”回到了 Python 2,那就太讓人崩潰了。需特別注意的是,這種方法意味著你需要暫停向應(yīng)用中添加新特性。

· 重新編寫應(yīng)用

最后也是最困難的解決方案,用 Python 3 或你認為最有效的任何其他編程語言從頭重寫應(yīng)用程序。這種解決方案可謂“勞民傷財”,而且只有當 Python 2 版本只是一個 prototype 時才有效。但它可以讓你完全重新設(shè)計你的項目,或許真的對你有用。

到底要不要遷移到 Python 3?

正如我一開始說的那樣,如果可以將項目遷移到 python3,那么趕緊做吧。Python3 不僅比 Python 2 快很多,而且它有更多優(yōu)秀的新特性,例如 asyncio、type hints、ordered dictionaries、f-strings 和更好的 Unicode 支持。風云已起,開發(fā)者還應(yīng)早作打算。

看完了這篇文章,相信你對關(guān)于Python 2的發(fā)展趨勢分析有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI