和 Python 2.x 说再见!
導讀:如果你仍在使用?Python?2.x,那么是時候將你的代碼移植到 Python 3 了。
本文經授權轉自公眾號CSDN(ID:CSDNnews),作者:屠敏
在技術的長河中,軟件、工具、系統等版本的迭代本是常事,但由于使用習慣、版本的兼容性、易用性等因素,很多用戶及開發者在使用或做開發的過程中,并不愿意及時同步更新,而這無疑為 IT 技術圈帶來了諸多碎片化問題,正如系統之 Android、Windows,也正如編程語言之 Python。
近日,Python 因為其版本的碎片化問題遭到了英國國家網絡安全中心(NCSC)的點名,NCSC 警告開發者們必須考慮將?Python 2.x 的代碼庫移植到 Python 3.x 版本上,主要是因為自 2020 年 1 月 1 日起,Python 2.x 將走到其生命的盡頭,不再得到支持(EOL,End-of-life)。
與此同時,NCSC 還將繼續使用 Python 2.x 的公司比作 EOL 以引誘另一個?WannaCry(病毒)或 Equifax(信息泄露)事件的發生。
01 Python 的應用現狀
而論及 Java,一年兩次迭代的速度早已讓不少開發者痛苦不堪,其紛紛開啟對 Oracle 的吐槽模式,并直言“馬上推出 JDK 13 的你只管更新,不用顧及我們的感受,總之我們還堅守在 JDK 1.x”。
事實上,不止 Java,Python 也有著相同的問題,很多人對 Python 舊版本的堅持反而也讓該語言的核心開發者們也備受煎熬,因為舊版本在安全性、功能上均無法與新版本相媲美,容易出現很多 Bug。
根據著名 IDE 開發商 JetBrains 和 Python 基金會于今年年初發布的《Python Developers Survey 2018 Results》報告顯示,Python 3 的采用率正在快速增長,將其作為主要解釋器的開發者比例從 2017 年的 75% 上升到了 84%,不過與此同時,Python 2 仍占有 16% 的份額。
其中,在 Python 2.x 版本中,Python 2.7 最受歡迎且使用的人數最多,占比 93%。
那么這些開發者究竟為何不愿意升級?
02 Python 的版本之過
不過在版本的迭代過程中,Python 出現了一個經常被開發者們詬病的問題,即于 2008 年發布的 Python 3 在設計時沒有考慮向較早版本相容的問題,Python 2.x 版本與 Python 3.x 之間并不兼容。
這意味著如果你的軟件是基于 Python 2 開發的,想要遷移到 Python 3 上面,無疑需要耗費巨大的成本。而且在此過程中,如果項目涉及到諸多關于 Python 2 的類庫,可能還會導致遷移失敗。
而自此問題的出現讓不少原本想要升級的開發者寧愿停留在以前的舊版本中,對此,有不少網友表示:
Python 2.x 和 Python 3.x 兩者在編碼效率上沒有明顯差距,但是 Python 3.x 卻要花額外的成本處理兼容性問題;
感覺 Python 2 和 Python 3 是兩門不同的語言,只不過他們的語法相似罷了;
......
除此之外,根據來自 Python 社區開發和共享軟件的存儲中心 Python Package Index 統計顯示,當前主流的 Python 軟件包中仍然有不少使用的是 Python 2.x 版本。且其中,每個包每個月的下載量高達百萬次。而想要將這些包移植到 Python 3 上,也絕非是一件易事。
03 Python 2.x 淘汰乃大勢所趨
與之對應的是主流第三方庫也不會再提供針對 Python 2 版本的開發支持。
不過,想要繼續使用舊版本也并非不可,就如同 Java 一樣,交付商業費用即可,但這樣的做法在日新月異的技術圈中,顯然不是長久之計。
如今 NCSC 的警醒,再次告誡開發者們,“如果繼續使用不受支持的模塊,公司就會冒著組織和數據的安全性風險,因為漏洞遲早會出現,而且沒人會修復。”
與此同時,來自?NCSC 的平臺安全研究員 Rich M 也于官方博客上列舉了不升級 Python 2 將面臨的種種問題:
1. 依賴項
許多流行的項目,如 NumPy、Requests 和 TensorFlow 等承諾到 2020 年將停止支持 2.x,并且當前一些項目已經這么做了。
這意味著如果你想使用你喜歡模塊的最新功能,那么就需要使用 Python 3。等待更新的時間越長,到時將更改的依賴項的 Python 3 版本會越多,更新起來會變得越困難。
2. 或將阻礙其他開發者
如果你正在維護其他開發者所依賴的庫,則可能會阻止他們更新到 Python 3。如果阻礙其他開發者,你會在間接、可能無意中加大其他項目面臨的安全風險。
你也許不在公司外部發布任何代碼,但要考慮可能也在內部使用你代碼的同事。
3. 錯失最新的 Python 功能
表達式的收益——允許生成器將其部分操作委托給另一個生成器。
Unicode 字符串——Unicode?處理起來更容易。
打印函數——打印函數有額外的功能,使其更靈活。
視圖和迭代器取代列表——一些眾所周知的 API 不再返回列表。比如說,字典返回鍵、值或兩者的視圖。
“multi-with”語句——復雜的 with 語句更易于閱讀。
使用 * 和 ** 解包——擴展 * 可迭代解包運算符和 ** 字典解包運算符的用途。現在可以在函數調用中使用任意數量的解包運算符。
純關鍵字實參——允許實參出現在 varargs 參數的后面。
F 字符串——運行時評估的一種新類型的字符串常量,可能含有任何有效的Python表達式。
大量的加速和優化機制。
04 Python 2.x 如何遷移到 Python 3.x?
那么對于普通的開發者而言,又該如何丟棄 Python 2.x 版本,向 Python 3.x 版本移植?基于此,NCSC 給出了如下的一些程序、教程和書籍,希望對大家有所裨益:
1. 「Can I Use Python 3」
https://github.com/brettcannon/caniusepython3
是一個程序,它可以檢查你項目的依賴項,看看有沒有依賴項在阻止你使用 Python 3。使用該程序來查看你是否需要換掉任何使用 Python 2.x 的庫。在這種情況下,有必要訪問該庫主頁,看看是否有計劃移植到 Python 3。
2. 「2to3」
https://docs.python.org/2/library/2to3.html
是一個 Python 程序,它試圖將 2.x 源代碼轉換成 Python 3。它通常與 Python 解釋器一起安裝為腳本。如果你只想看看它對源代碼進行的每次變更有何差異,則可以在不用編寫任何更改的情況下運行該程序。注意:這并不完美,你可能仍需要手動修復一些代碼。
3. 《支持Python 3:深入指南》
http://python3porting.com/
是一本免費的開源電子書,可指導你完成添加 Python 3 支持的過程。本書解釋了你可能遇到的一些常見遷移問題,并列出了使用 Python 3中 的新功能改進源代碼的方法。
4. 「Six」
https://github.com/benjaminp/six
是一個 Python 2 和 3 兼容庫,為開發者提供了編寫與 Python 2 和 3 都兼容的代碼。使用該庫,開發人員可以選擇使用哪個版本的 Python 解釋器來運行代碼。如果你決定使用該庫,確保代碼表明了這一點:Python 版本號可能很快增加到 4.0(截至本文發稿時最新版本為 3.7.4)。
5. 利用他人的經驗來幫助你
很多人已講述了移植代碼庫方面的經驗。Dropbox 在 2018 年將代碼庫遷移到 Python 3,撰寫了一篇博文詳細介紹了經驗:
https://blogs.dropbox.com/tech/2018/09/how-we-rolled-out-one-of-the-largest-python-3-migrations-ever/
6. Python 官網
https://docs.python.org/3/howto/pyporting.html
基于此,你會放棄 Python 2.x 嗎?
參考:
https://www.ncsc.gov.uk/blog-post/time-to-shed-python-2
本文轉自公眾號“CSDN”,ID:CSDNnews
有話要說?
Q:?你在用哪個版本的Python?
歡迎留言與大家分享
猜你想看?數據分析與數據化運營的關鍵知識點,全在這里了
如何在 Apache Flink 中使用 Python API?
解讀人工智能、大數據和云計算的關系,大佬們賭AI竟都輸了?
身高2m,體重2kg,這樣的數據“看上去很好”?
更多精彩?
在公眾號對話框輸入以下關鍵詞
查看更多優質內容!
PPT?|?報告?|?讀書?|?書單?|?干貨?
大數據?|?揭秘?|?Python?|?可視化
AI?|?人工智能?|?5G?|?區塊鏈
機器學習?|?深度學習?|?神經網絡
合伙人?|?1024?|?段子?|?數學?|?高考
據統計,99%的大咖都完成了這個神操作
?
覺得不錯,請把這篇文章分享給你的朋友
轉載 / 投稿請聯系:baiyu@hzbook.com
更多精彩,請在后臺點擊“歷史文章”查看
總結
以上是生活随笔為你收集整理的和 Python 2.x 说再见!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这10个功能模块,手把手教你从零设计电商
- 下一篇: 一文看懂数据预处理最重要的3种思想和方法