和Python 2.x 說再見!

2020-12-11 站長之家

聲明:本文來自於微信公眾號  CSDN(ID:CSDNnews),整理:屠敏,授權站長之家轉載發布。

如果你仍在使用 2.x,那麼是時候將你的代碼移植到 Python 3 了。

在技術的長河中,軟體、工具、系統等版本的迭代本是常事,但由於使用習慣、版本的兼容性、易用性等因素,很多用戶及開發者在使用或做開發的過程中,並不願意及時同步更新,而這無疑為 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(信息洩露)事件的發生。

Python 的應用現狀

回望近些年才被 AI 點燃的 Python,其實並非是一門新的語言,它最早於 1989 年底由知名的荷蘭電腦程式員 Guido van Rossum 發明,後來作為一門面向對象、直譯式電腦程式設計語言於 1991 年面世。其 30 年的發展歷程可謂比程式語言界的常青藤 Java 更為久遠。

而論及 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%。

那麼這些開發者究竟為何不願意升級?

Python 的版本之過

一直以來,語法簡單、擁有豐富和強大類庫的 Python 被稱之為一門膠水語言,它能夠很輕鬆的把用其它語言製作的各種模塊(尤其是 C/C++)輕鬆地聯結在一起。

不過在版本的迭代過程中,Python 出現了一個經常被開發者們詬病的問題,即於 2008 年發布的 Python 3 在設計時沒有考慮向較早版本相容的問題,Python 2.x 版本與 Python 3.x 之間並不兼容。這意味著如果你的軟體是基於 Python 2 開發的,想要遷移到 Python 3 上面,無疑需要耗費巨大的成本。而且在此過程中,如果項目涉及到諸多關於 Python 2 的類庫,可能還會導致遷移失敗。

而自此問題的出現讓不少原本想要升級的開發者寧願停留在以前的舊版本中,對此,有不少網友表示:

除此之外,根據來自 Python 社區開發和共享軟體的存儲中心 Python Package Index 統計顯示,當前主流的 Python 軟體包中仍然有不少使用的是 Python 2.x 版本。且其中,每個包每個月的下載量高達百萬次。而想要將這些包移植到 Python 3 上,也絕非是一件易事。

Python 2.x 淘汰乃大勢所趨

誠然開發者有多少個不願意,但 Python 2.x 淘汰已成必然趨勢。早在 2018 年 3 月,Python 之父 Guido van Rossum 就曾在郵件列表上宣布 Python 2.7 將於 2020 年 1 月 1 日終止支持,這意味著之後 Python 2 將不再被統一維護,與之對應的是主流第三方庫也不會再提供針對 Python 2 版本的開發支持。不過,想要繼續使用舊版本也並非不可,就如同 Java 一樣,交付商業費用即可,但這樣的做法在日新月異的技術圈中,顯然不是長久之計。

如今 NCSC 的警醒,再次告誡開發者們,「如果繼續使用不受支持的模塊,公司就會冒著組織和數據的安全性風險,因為漏洞遲早會出現,而且沒人會修復。」

與此同時,來自 NCSC 的平臺安全研究員 Rich M 也於官方博客上列舉了不升級 Python 2 將面臨的種種問題:

依賴項

許多流行的項目,如 NumPy、Requests 和 TensorFlow 等承諾到 2020 年將停止支持 2.x,並且當前一些項目已經這麼做了。

這意味著如果你想使用你喜歡模塊的最新功能,那麼就需要使用 Python 3。等待更新的時間越長,到時將更改的依賴項的 Python 3 版本會越多,更新起來會變得越困難。

或將阻礙其他開發者

如果你正在維護其他開發者所依賴的庫,則可能會阻止他們更新到 Python 3。如果阻礙其他開發者,你會在間接、可能無意中加大其他項目面臨的安全風險。

你也許不在公司外部發布任何代碼,但要考慮可能也在內部使用你代碼的同事。

錯失最新的 Python 功能

  • 表達式的收益——允許生成器將其部分操作委託給另一個生成器。

  • Unicode 字符串——Unicode 處理起來更容易。

  • 列印函數——列印函數有額外的功能,使其更靈活。

  • 視圖和迭代器取代列表——一些眾所周知的 API 不再返回列表。比如說,字典返回鍵、值或兩者的視圖。

  • 「multi-with」語句——複雜的 with 語句更易於閱讀。

  • 使用 * 和 ** 解包——擴展 * 可迭代解包運算符和 ** 字典解包運算符的用途。現在可以在函數調用中使用任意數量的解包運算符。

  • 純關鍵字實參——允許實參出現在 varargs 參數的後面。

  • F 字符串——運行時評估的一種新類型的字符串常量,可能含有任何有效的Python表達式。

  • 大量的加速和優化機制。

Python 2.x 如何遷移到 Python 3.x?

如今 Python 已經被廣泛應用於 Google、Facebook、Netflix 等實踐的生產環境中,也橫掃了各大程式語言排行榜,對此,更有人預估,其可能在未來幾年內超越 C 和 Java,成為無可爭議的程式語言領導者。

那麼對於普通的開發者而言,又該如何丟棄 Python 2.x 版本,向 Python 3.x 版本移植?基於此,NCSC 給出了如下的一些程序、教程和書籍,希望對大家有所裨益:

基於此,你會放棄 Python 2.x 嗎?

相關焦點

  • Python 2.x 與 Python 3.x 的區別
    為了照顧現有程式,Python 2.6 作為一個過度版本,基本使用了 Python 2.x 得語法和庫,同時考慮了向 Pythn 3.0 得遷移,允許使用部分 Python 3.0 的語法與函數。Python 3.0 的變化主要在以下幾個方面:1 print 函數print 語句沒有了,取而代之的是 print() 函數。
  • python 3.x 與2.x的區別
    現在不單單是要學python,還在考慮用它做點什麼,這些等後續再說吧,因為看的是python2.x的書籍。用的是python 3.7.所以先把兩者的區別記錄一下,僅限於基礎。python3.x 與2.x的區別1.printprint語句沒有了,取而代之的是print()函數。
  • Python 2.x 字符編碼終極指南
    但僅了解這篇文章的內容,並不能幫我們在日常編程中躲過一些字符編碼相關的坑,Stackoverflow 上就有大量編碼相關的問題,比如 1,2,3。本文首先嘗試對編碼、解碼進行一個宏觀、直觀的解讀,然後詳細來解釋 python2 中的str和unicode,並對常見的UnicodeEncodeError 和 UnicodeDecodeError 異常進行剖析。
  • 瘋狂上漲的 Python,開發者應從 2.x 還是 3.x 著手?
    但與此同時,不少開發者開始糾結 Python 的入門究竟該從 2.x 還是 3.x 開始學起?畢竟 Python 語言作者 Guido van Rossum 曾於 2014 年宣布 Python 2.7 支持時間延長到 2020 年。Python 2.7 是 2.x 系列的最後一個版本,它的繼承者 Python 3.0 在 2008 年 12 月發布,但不兼容 2.x 系列。
  • Python 2 與 Python 3 的區別
    xrangePython 2中有 range 和 xrange 兩個方法。其區別在於,range返回一個list,在被調用的時候即返回整個序列;xrange返回一個iterator,在每次循環中生成序列的下一個數字。Python 3中不再支持 xrange 方法,Python 3中的 range 方法就相當於 Python 2中的 xrange 方法。
  • Python基礎篇-08 Python版本區別,Python 3和Python 2區別詳解
    第一章 Python編程基礎----Python版本區別,Python 3和Python 2區別詳解和 Python 2.x 版本相比,Python 3.x 版本在語句輸出、編碼、運算和異常等方面做出了一些調整,本節就對這些調整一一做一下簡單介紹。
  • Python基礎教程—Spyder簡介和Python版本
    它綜合了開發工具的高級編輯,性能分析,調試和分析功能與數據探索等功能。1、Spyder工作頁面介紹Spyder的界面設計和matlab十分地相似,熟悉matlab的同學可以很快地習慣使用Spyder。代碼編輯區域:編寫整塊的代碼編寫。
  • Python X 蒙特卡洛方法
    我們用python來實現這個過程:  首先我們自定義一個變量x的平均值為10, 標準差為0.3import numpy as10+x**2+5np.shape(y) #用numpy的shape函數可以查看變量的大小,結果顯示y為一個1000行的數組(1000,)計算取得y的平均值和標準差
  • 機器學習如何從Python 2遷移到Python 3
    通過 @ 實現矩陣乘法下面,我們實現一個最簡單的機器學習模型,即帶 L2 正則化的線性回歸 (如嶺回歸模型),來對比 Python2 和 Python3 之間的差別:# l2-regularized linear regression: || AX - b ||^2 + alpha * ||x||^2 -> min# Python 2X = np.linalg.inv
  • 利用python計算函數與x軸之間的面積
    用數學表達式表示出來就是:也就是求解任意一個函數的絕對值與x軸之間構成的面積,我們以函數sin(x)為例(因為函數sin(x)便於對計算結果進行檢驗),如圖所示:我們用積分的定義來計算,積分就是將函數分成無數的小段,然後對每一小段進行求和處理。
  • Python3與Python2 區別
    print(type(3 / 2))2、python3廢棄long類型,統一使用int類型a=111111111111print(type(a))#python2: <type 'long'>#python3: <class 'int'>3、python3 round函數返回int類型,而python2
  • 【Python面試】談談對 Python3 和 Python2 的區別?​
    如果參考答案不夠好,或者有錯誤的話,麻煩大家可以在留言區給出自己的意見和討論,大家是要一起學習的 。廢話不多說,開始今天的題目:問:談談Python3 和 Python2 的區別?答:Python3跟Python2比,語法上就有很多區別,都需要特別注意,下面給大家列舉幾個常見的 。
  • 【小喵科技】MicroPython教程:python基礎篇2
    前面我介紹了python的數組,或者有些書稱之為列表。正如前面所說,dir是剖析一個對象內部信息。因為a是一個數組對象,所以他擁有一個數組對象所有的方法函數。我們挑幾個數組函數來做實驗,大家自己把程序下載到microbit上看看輸出跟想的是不是一樣:a = [1, 2, 3, 4, 5]print(a)a.append(6)print(a)a.remove(3)print(a)a.pop(0)print(a)說到數組我們不得不提另外一個函數len
  • python 3.X搭建robotframework總結
    以前在公司在python2.7上搭建過,說是搭建不如是按照文檔一步步的操作,文件什麼的全是同事準備好的,不會的就喊同事幫忙,所以安裝下來還是什麼也不懂,這次完全是自己操作,需要的文件也是自己動手準備,遇到問題就百度,搗鼓了一天終於搭建好了,也收穫頗多。好了,廢話說了一堆,現在進入正題。
  • 再見 2019,再見 Python 2
    今天是 Python 2 正式停止官方支持的日子。我是 2009 年開始學習並使用 Python 的,至今已有十年。其中大約有一半時間和一大半項目都是用 Python 2 的版本。雖然以目前的眼光來看,py2 的坑確實不少,早就該被淘汰了。但如果沒有不完善的 py2,就不會有相對更完善的 py3。
  • 【Python面試】 說說Python中xrange和range的區別?
    如果參考答案不夠好,或者有錯誤的話,麻煩大家可以在留言區給出自己的意見和討論,大家是要一起學習的 。廢話不多說,開始今天的題目:問:說說Python中xrange和range的區別?答:range()和xrange()都是在循環中使用,輸出結果一樣。
  • 學python能找到女朋友嗎(python基礎教程)
    python對你來說,這可能還是一個陌生的領域,不過相信隨著逐步深入的了解,你會喜歡上python!首先,讓我們來看一下,python新手應該注意和了解哪些事情吧! 一、python是什麼?Python語法簡潔而清晰,具有豐富和強大的類庫。它常被暱稱為膠水語言,它能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕鬆地聯結在一起。常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),然後對其中有特別要求的部分,用更合適的語言改寫,比如3D遊戲中的圖形渲染模塊,性能要求特別高,就可以用C++重寫。
  • Python 內置函數總結(2/4)
    官網: https://docs.python.org/3.6/library/functions.html可以看官網英文描述,解釋和例子還是看小編公眾號吧畢竟一段文字沒有例子總是看著很費勁比如Ast是python源碼到字節碼的一種中間產物,藉助ast模塊可以從語法樹的角度分析源碼結構。此外,我們不僅可以修改和執行語法樹,還可以將Source生成的語法樹unparse成python源碼。
  • Python生成器next方法和send方法區別詳解
    : 1, 'y': 2, 'z': 3} d2 = {k: v for (k, v) in d1.items()} print(d2) 集合生成式: 集合生成式格式和列表生成式類似,不過用的是大括號: s1python實現隨機加減法生成器本文實例為大家分享了python實現隨機加減法生成器的具體代碼,供大家參考,具體內容如下 為了讓外甥女練習算術,用python給她寫了個自動出加減法的小程序
  • Python的Iterable和Iterator
    >>> iter([1,2,3])<listiterator object at 0x026C8970> >>> iter({1:2, 2:4})<dictionary-keyiterator object at 0x026CC1B0> >