Python 2大限來了!113天后自生自滅 | 附升級指南
乾明 栗子 發自 凹非寺
量子位 報道 公眾號 QbitAI
Python 2 終于走到了盡頭。
官方宣布,新一年的鐘聲響起之時(2020 年 1 月 1 日),就是 Python 2 落幕之日。
之后,Python 2 自生自滅,就算天塌下來,官方也不會再改進了。
他們解釋稱,并不想傷害 Python 2 用戶,這個決定是為了 Python 用戶好。
只有放棄 Python 2,他們才能讓 Python 3 變得更好。
這一舉動得到了不少支持與理解:
也有人念舊。
有網友開始放話,表示自己會支持 Python2 的維護與更新,不為什么,就是想用 Python 2。
但隨著官方不再支持 Python 2,近年來也有大量的工具宣布放棄支持 Python 2。比如 TensorFlow、Pandas、Numpy、Jupyter Notebook、Cython 等工具。
如果想用好 Python,擺在 Python 2 用戶面前的路似乎就只有一條:
升級到 Python 3。
升級攻略
升級的路上,會遇到很多問題,Python 官方先幫你解答了一波:
1、沒在 2020 年 1 月 1 日之前更新會怎樣呢?
如果有人發現 Python 2 里面有災難性的安全漏洞,也不會有太多人志愿幫忙修補的。
需要 Python 2 的相關幫助,也不會有很多人去幫你了。隨著時間的推移,能幫到你的人還會越來越少。
很多好工具都用不了,因為只有 Python 3 才支持。這樣的話,還可能拖累那些跟你一起工作的小伙伴。
以上問題,有些會從 1 月 1 日開始產生,另一些會隨著時間越來越嚴重。
2、我在 Python 2 里寫的代碼,怎么遷移到 Python 3?
有中文文檔提供,詳細介紹了步驟,可以自動遷移。除此之外,由 2 到3,一些函數發生了變化,文檔里有列表,各位可以自行查找,手動修改:
中文文檔:2to3 - 自動將 Python 2 代碼轉為 Python 3 代碼
https://docs.python.org/zh-cn/3.7/library/2to3.html
另外,還有兩個英文文檔可以參考:
Porting Python 2 Code to Python 3
https://docs.python.org/3/howto/pyporting.html
Python 3 Statement Practicalities
https://python3statement.org/practicalities/
3、我不確定我用的軟件會不會依賴于 Python 2,怎么辦?
如果你是從供應商那里買的軟件,問他們就好了。如果你是向開發者或者系統管理員付費的話,就問這些人。
要是找不到相關的供應商和技術人員,就用“Can I Use Python 3?”去查找,你到底需不需要某個用 Python 2 寫的軟件。
Can I Use Python 3:
https://pypi.org/project/caniusepython3/
想知道某些特定的工具,和 Python 3 兼不兼容,可以看 Python 2.7 Readiness、Python 3 Statement,以及 Python 3 Readiness。
4、我還是依賴一些用 Python 2 寫的軟件,怎么辦?
同理,也是詢問供應商和技術支持人員,如果你是向開發者或者系統管理員付費,就去問他們。
問不到的話,用“Can I Use Python 3?”來查找升級到 Python 3 的工具。
Can I Use Python 3:
https://pypi.org/project/caniusepython3/
5、有人能幫我一下么?
有。如果你能支付擴展支持 (Extended Support) 的費用,就跟這些供應商聯系吧:
https://wiki.python.org/moin/PythonConsulting/Python%202%20support%20and%20migration
你心里的問題,可能不止這些,但現在的你可能更需要一些鼓勵,以便順利完成遷移,所以來看 Hacker News 頂樓 (@ken) 的留言吧:
Python 2 到3,是我做過的最簡單的遷移之一了。
有一個叫“six”的庫可用,而且幾乎在任何情況下,都能寫出 2 和 3 兼容的代碼。
six 庫傳送門:
Python 2 往事
Python 源自 20 世紀 80 年代末,當時 Python 的創建者 Guido van Rossum 正在 CWI(荷蘭數學與計算機研究所)研究 Amoeba 分布式計算系統,使用C和 Unix shell。
在這個過程中,他逐漸對這些語言感到不爽,不僅運行速度太慢,無法處理復雜邏輯,也不得不重復造輪子。
于是 Guido 就有了在業余時間創建 Python 的念頭。1991 年,Python 第一版問世,可以說是兼具各家之長。
之后一路勢如破竹,2003 年以來,Python 一直在 TIOBE 排行榜中最受歡迎的編程語言的前十位。
Python 在 2007 年獲得了 TIOBE 年度最佳編程語言獎。該獎項是根據 TIOBE 指數,授予全年受歡迎程度最高的編程語言。
Python 2 當時也受到大公司青睞:包括 Google、非死book、亞馬遜在內的諸多知名公司都在使用它,包括 油Tube、Reddit 在內的大型應用,都是出自 Python。
科研機構 NASA 還用 Python 來簡化航天飛機的任務流程設計,去探索太空。
“人生苦短,我用 Python”成為被大多數程序員熟知的“梗”,Python 也成為了一門吞噬世界的語言。
這中間,雖然有 Python2 的功勞,也有 Python 基于時過境遷進行的“蛻變”。
Python 3 未來
隨著算力的不斷增強,計算平臺發生變遷,Python 這條“巨蟒”在新的運行環境中,逐漸變得力有不逮。
2008 年,為了修復缺陷,更好地適應新環境,讓 Python 更有生命力,Python 社區做了一個非常有決斷的動作:
推出 Python 3,不向后兼容。
當時給 Python 2.7 定下的 Deadline 是 2015 年。因為擔心大量現有代碼無法遷移到 Python 3,這一時間又推遲到了 2020 年。
這背后長痛不如短痛的想法,輕裝前行的理念等等, 大部分開發者都理解。
而且,這也為 Python 贏得了不少使用場景,最典型的就是成為了機器學習這一熱門領域的寵兒。
谷歌的 TensorFlow 使用的就是 Python。非死book 更直接,從 PyTorch 的名字來看就知道它和 Python 密不可分的聯系。
但版本割裂帶來的陣痛,還是成為了 Python 被詬病的一大重點。
雖然 Python 也發布了程序,幫助開發者更好地將 Python 2 代碼轉換為 Python 3。
但這也讓不少人糾結與徘徊,更有對手看到了機會,而且來勢洶洶。
比如谷歌 2009 年正式推出的 Go,更是“明目張膽”地搶人——開發一款從 Python 2.7 到 Go 語言的編譯器。
還有 Julia。這一源自 MIT 的新編程語言,創建于 Python 3 發布第二年,2012 年公開發布。
主要的應用領域為數據分析、機器學習、物理學、數學、人工智能、信號與圖像處理等等。
而這些,都是當下 Python 發揮作用、面向未來的核心陣地。
不過,Python 也沒有停下來發展的腳步,也在不斷推陳出新,面向未來編程。
比如 PyPy 的不斷優化,SciPy 和 NumPy 的不斷完善等等,都在放大 Python 的能量。
現在,Python 辭舊的倒計時已經掛起。
這個起于 20 世紀 80 年代一個業余項目的語言,到現在仍舊具備超強生命力,兼容并包,成為開發者手中的利器,不斷吞噬世界。