在技術的長河中,軟件、工具、系統(tǒng)等版本的迭代本是常事,但由于使用習慣、版本的兼容性、易用性等因素,很多用戶及開發(fā)者在使用或做開發(fā)的過程中,并不愿意及時同步更新,而這無疑為 IT 技術圈帶來了諸多碎片化問題,正如系統(tǒng)之 Android、Windows,也正如編程語言之 Python。近日,Python 因為其版本的碎片化問題遭到了英國國家網絡安全中心(NCSC)的點名,NCSC 警告開發(fā)者們必須考慮將 Python 2.x 的代碼庫移植到 Python 3.x 版本上,主要是因為自 2020 年 1 月 1 日起,Python 2.x 將走到其生命的盡頭,不再得到支持(EOL,End-of-life)。與此同時,NCSC 還將繼續(xù)使用 Python 2.x 的公司比作 EOL 以引誘另一個 WannaCry(病毒)或 Equifax(信息泄露)事件的發(fā)生。
Python 的應用現(xiàn)狀
回望近些年才被 AI 點燃的 Python,其實并非是一門新的語言,它最早于 1989 年底由知名的荷蘭計算機程序員 Guido van Rossum 發(fā)明,后來作為一門面向對象、直譯式計算機程序設計語言于 1991 年面世。其 30 年的發(fā)展歷程可謂比編程語言界的常青藤 Java 更為久遠。而論及 Java,一年兩次迭代的速度早已讓不少開發(fā)者痛苦不堪,其紛紛開啟對 Oracle 的吐槽模式,并直言“馬上推出 JDK 13 的你只管更新,不用顧及我們的感受,總之我們還堅守在 JDK 1.x”。事實上,不止 Java,Python 也有著相同的問題,很多人對 Python 舊版本的堅持反而也讓該語言的核心開發(fā)者們也備受煎熬,因為舊版本在安全性、功能上均無法與新版本相媲美,容易出現(xiàn)很多 Bug。根據(jù)著名 IDE 開發(fā)商 JetBrains 和 Python 基金會于今年年初發(fā)布的《Python Developers Survey 2018 Results》報告顯示,Python 3 的采用率正在快速增長,將其作為主要解釋器的開發(fā)者比例從 2017 年的 75% 上升到了 84%,不過與此同時,Python 2 仍占有 16% 的份額。
其中,在 Python 2.x 版本中,Python 2.7 最受歡迎且使用的人數(shù)最多,占比 93%。
那么這些開發(fā)者究竟為何不愿意升級?
Python 的版本之過
一直以來,語法簡單、擁有豐富和強大類庫的 Python 被稱之為一門膠水語言,它能夠很輕松的把用其它語言制作的各種模塊(尤其是 C/C++)輕松地聯(lián)結在一起。不過在版本的迭代過程中,Python 出現(xiàn)了一個經常被開發(fā)者們詬病的問題,即于 2008 年發(fā)布的 Python 3 在設計時沒有考慮向較早版本相容的問題,Python 2.x 版本與 Python 3.x 之間并不兼容。這意味著如果你的軟件是基于 Python 2 開發(fā)的,想要遷移到 Python 3 上面,無疑需要耗費巨大的成本。而且在此過程中,如果項目涉及到諸多關于 Python 2 的類庫,可能還會導致遷移失敗。而自此問題的出現(xiàn)讓不少原本想要升級的開發(fā)者寧愿停留在以前的舊版本中,對此,有不少網友表示:
Python 2.x 和 Python 3.x 兩者在編碼效率上沒有明顯差距,但是 Python 3.x 卻要花額外的成本處理兼容性問題;
感覺 Python 2 和 Python 3 是兩門不同的語言,只不過他們的語法相似罷了;
。..。..
除此之外,根據(jù)來自 Python 社區(qū)開發(fā)和共享軟件的存儲中心 Python Package Index 統(tǒng)計顯示,當前主流的 Python 軟件包中仍然有不少使用的是 Python 2.x 版本。且其中,每個包每個月的下載量高達百萬次。而想要將這些包移植到 Python 3 上,也絕非是一件易事。
Python 2.x 淘汰乃大勢所趨
誠然開發(fā)者有多少個不愿意,但 Python 2.x 淘汰已成必然趨勢。早在 2018 年 3 月,Python 之父 Guido van Rossum 就曾在郵件列表上宣布 Python 2.7 將于 2020 年 1 月 1 日終止支持,這意味著之后 Python 2 將不再被統(tǒng)一維護,與之對應的是主流第三方庫也不會再提供針對 Python 2 版本的開發(fā)支持。不過,想要繼續(xù)使用舊版本也并非不可,就如同 Java 一樣,交付商業(yè)費用即可,但這樣的做法在日新月異的技術圈中,顯然不是長久之計。如今 NCSC 的警醒,再次告誡開發(fā)者們,“如果繼續(xù)使用不受支持的模塊,公司就會冒著組織和數(shù)據(jù)的安全性風險,因為漏洞遲早會出現(xiàn),而且沒人會修復。”與此同時,來自 NCSC 的平臺安全研究員 Rich M 也于官方博客上列舉了不升級 Python 2 將面臨的種種問題:依賴項許多流行的項目,如 NumPy、Requests 和 TensorFlow 等承諾到 2020 年將停止支持 2.x,并且當前一些項目已經這么做了。這意味著如果你想使用你喜歡模塊的最新功能,那么就需要使用 Python 3。等待更新的時間越長,到時將更改的依賴項的 Python 3 版本會越多,更新起來會變得越困難。或將阻礙其他開發(fā)者如果你正在維護其他開發(fā)者所依賴的庫,則可能會阻止他們更新到 Python 3。如果阻礙其他開發(fā)者,你會在間接、可能無意中加大其他項目面臨的安全風險。你也許不在公司外部發(fā)布任何代碼,但要考慮可能也在內部使用你代碼的同事。錯失最新的 Python 功能
表達式的收益——允許生成器將其部分操作委托給另一個生成器。
Unicode 字符串——Unicode 處理起來更容易。
打印函數(shù)——打印函數(shù)有額外的功能,使其更靈活。
視圖和迭代器取代列表——一些眾所周知的 API 不再返回列表。比如說,字典返回鍵、值或兩者的視圖。
“multi-with”語句——復雜的 with 語句更易于閱讀。
使用 * 和 ** 解包——擴展 * 可迭代解包運算符和 ** 字典解包運算符的用途。現(xiàn)在可以在函數(shù)調用中使用任意數(shù)量的解包運算符。
純關鍵字實參——允許實參出現(xiàn)在 varargs 參數(shù)的后面。
F 字符串——運行時評估的一種新類型的字符串常量,可能含有任何有效的Python表達式。
大量的加速和優(yōu)化機制。
Python 2.x 如何遷移到 Python 3.x?
如今 Python 已經被廣泛應用于 Google、Facebook、Netflix 等實踐的生產環(huán)境中,也橫掃了各大編程語言排行榜,對此,更有人預估,其可能在未來幾年內超越 C 和 Java,成為無可爭議的編程語言領導者。那么對于普通的開發(fā)者而言,又該如何丟棄 Python 2.x 版本,向 Python 3.x 版本移植?基于此,NCSC 給出了如下的一些程序、教程和書籍,希望對大家有所裨益:
「Can I Use Python 3」(https://github.com/brettcannon/caniusepython3)是一個程序,它可以檢查你項目的依賴項,看看有沒有依賴項在阻止你使用 Python 3。使用該程序來查看你是否需要換掉任何使用 Python 2.x 的庫。在這種情況下,有必要訪問該庫主頁,看看是否有計劃移植到 Python 3。
「2to3」(https://docs.python.org/2/library/2to3.html)是一個 Python 程序,它試圖將 2.x 源代碼轉換成 Python 3。它通常與 Python 解釋器一起安裝為腳本。如果你只想看看它對源代碼進行的每次變更有何差異,則可以在不用編寫任何更改的情況下運行該程序。注意:這并不完美,你可能仍需要手動修復一些代碼。
《支持Python 3:深入指南》(http://python3porting.com/)是一本免費的開源電子書,可指導你完成添加 Python 3 支持的過程。本書解釋了你可能遇到的一些常見遷移問題,并列出了使用 Python 3中 的新功能改進源代碼的方法。
「Six 」(https://github.com/benjaminp/six)是一個 Python 2 和 3 兼容庫,為開發(fā)者提供了編寫與 Python 2 和 3 都兼容的代碼。使用該庫,開發(fā)人員可以選擇使用哪個版本的 Python 解釋器來運行代碼。如果你決定使用該庫,確保代碼表明了這一點:Python 版本號可能很快增加到 4.0(截至本文發(fā)稿時最新版本為 3.7.4)。
利用他人的經驗來幫助你——很多人已講述了移植代碼庫方面的經驗。Dropbox 在 2018 年將代碼庫遷移到 Python 3,撰寫了一篇博文詳細介紹了經驗(https://blogs.dropbox.com/tech/2018/09/how-we-rolled-out-one-of-the-largest-python-3-migrations-ever/)。
Python 官網(https://docs.python.org/3/howto/pyporting.html)。
基于此,你會放棄 Python 2.x 嗎?
-
編程語言
+關注
關注
10文章
1947瀏覽量
34848 -
python
+關注
關注
56文章
4801瀏覽量
84863
原文標題:再見,Python 2.x
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論