從Python 2切換到Python 3你所需要了解的
Python 2 將在幾周內(nèi)走到生命終點(diǎn),這篇文章是你遷移到 Python 3 之前應(yīng)該知道的。
從 2020 年 1 月 1 日開始,Python 2.7 將不再得到正式支持。在此日期之后,將會發(fā)布一個最終錯誤修復(fù)計劃,但是僅此而已。
Python 2 的生命終點(diǎn)(EOL)對你意味著什么?如果正在運(yùn)行著 Python 2,你需要遷移。
是誰決定 Python 2 的生命終點(diǎn)?
在 2012 年,維護(hù) Python 編程語言的團(tuán)隊審查了其選項。有兩個越來越不同的代碼庫,Python 2 和 Python 3。這兩者都很流行,但是較新的版本并未得到廣泛采用。
除了 Python 3 中完全重寫的 Unicode 支持改變了處理數(shù)據(jù)的底層方式造成的斷層,這個主要版本的變化還一次性出現(xiàn)了一些非向后兼容的更改。這種斷層的決定成文于 2006 年。為了減輕該斷層的影響,Python 2 繼續(xù)保持了維護(hù),并向后移植了一些 Python 3 的功能。為了進(jìn)一步幫助社區(qū)過渡,EOL 日期從 2015 年延長至 2020 年,又延長了五年。
該團(tuán)隊知道,維護(hù)不同的代碼庫是必須解決的麻煩。最終,他們宣布了一項決定:
“我們是制作和照料 Python 編程語言的志愿者。我們已決定 2020 年 1 月 1 日將是我們停止使用 Python 2 的日子。這意味著在這一天之后,即使有人發(fā)現(xiàn)其中存在安全問題,我們也將不再對其進(jìn)行改進(jìn)。你應(yīng)盡快升級到 Python 3。”
Nick Coghlan 是 CPython 的核心開發(fā)人員,也是 Python 指導(dǎo)委員會的現(xiàn)任成員,在他的博客中添加了更多信息。由 Barry Warsaw(也是 Python 指導(dǎo)委員會的成員)撰寫的 PEP 404 詳細(xì)說明了 Python 2.8 永遠(yuǎn)不會面世的原因。
有人還在支持 Python 2 嗎?
提供者和供應(yīng)商對 Python 2 的支持會有所不同。Google Cloud 宣布了它計劃未來如何支持 Python 2。紅帽還宣布了紅帽企業(yè) Linux(RHEL)的計劃,而 AWS 宣布了 AWS 命令行界面和 SDK 的次要版本更新要求。
你還可以閱讀 Vicki Boykis 在 Stack Overflow 撰寫的博客文章“為什么遷移到 Python 3 需要這么長時間?”,其中她指出了采用 Python 3 緩慢的三個原因。
使用 Python 3 的原因
不管是否有持續(xù)的支持,盡快遷移到 Python 3 是一個好主意。Python 3 將繼續(xù)受到支持,它具有 Python 2 所沒有的一些非常優(yōu)雅的東西。
最近發(fā)布的 Python 3.8 包含 海象運(yùn)算符、位置參數(shù)和自描述的格式化字符串等功能。Python 3 的早期版本引入的功能,例如 異步 IO、格式化字符串、類型提示 和 pathlib,這里只提及了一點(diǎn)點(diǎn)。
下載最多的前 360 個軟件包已遷移到 Python 3。你可以使用 caniusepython3 軟件包檢查你的 requirements.txt
文件,以查看你依賴的任何軟件包是否尚未遷移。
將 Python 2 移植到 Python 3 的參考資源
有許多參考資源可簡化你向 Python 3 的遷移。例如,“將 Python 2 移植到 Python 3 指南”列出了許多工具和技巧,可幫助你實現(xiàn)與 Python 2/3 單一源代碼的兼容性。在 Python3statement.org 上也有一些有用的技巧。
Dustin Ingram 和 Chris Wilcox 在 Cloud Next ‘19上作了一個演講,詳細(xì)介紹了向 Python 3 過渡的一些動機(jī)和遷移模式。Trey Hunner 在 PyCon 2018 演講上介紹了 Python 3 最有用的功能,鼓勵你進(jìn)行遷移,以便你可以利用它們。