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