完美世界手游官网隐藏任务 www.gytoi.icu

圖0:Python 2 壽命即將終結,在此之前你需要做些什么?

Python 軟件基金會宣布,到 2020 年元旦,將不再為編程語言 Python 2.x 分支提供任何支持。這一天將標志著一出延續多年的戲劇的高潮:Python 從較舊的、功能較弱的、廣泛使用的版本過渡到更新的、更強大的版本。然而,Python 的新版本在采用上仍然落后于它的舊版本。未來幾年里,還會有很多人繼續使用 Python 2 編寫的程序,當世界被 Python 3 迅速占領之時,受困于壽命終將終結的 Python 2,你應該怎么辦?

現在,是時候了。與 Python 2 相比,Python 3 有著無數的技術和最終用戶增強功能,但卻未能永久取代 Python 2。PyPI 存儲庫中托管的大多數流行包都支持 Python 3(該庫是可重用 Python 代碼的第一站)。Python 3 現在已經成為許多 Linux 發行版默認的 Python 解釋器。大多數最近出版的書籍、編碼學院(coding academy)和在線課程都向初學者推薦了 Python 3。

現在的壞消息是,Python 2,就像 Windows 7(或 Windows XP),在未來的幾年里,還將會伴隨我們很長時間。我們中的許多人還將繼續依賴于使用 Python 2 編寫的應用程序。由于內部限制,我們中的一些人甚至還會繼續將 Python 2 用于新的應用程序。如果這個世界正在被 Python 3 迅速占領,而你卻受困于 Python2,這該如何是好呢?讓我們來看看都有哪些選擇吧!

Python 2 壽命終結意味著什么

關于 Python 2 走向 EOL(End of Life,壽命終止)的第一件事也是最重要的事情是:Python 2 應用程序仍將運行。不要認為這是千年蟲的問題,Python 2 應用程序并不會在 2020 年 1 月 1 日全部神奇地停止運行。只是核心 Python 開發團隊將不再對 Python 2 提供任何官方支持而已。

下面是 Python 2 EOL 在實際應用中的含義:

  • 將不再提供 Python 2 的官方 bug 修復和安全補丁。 核心開發團隊將不會修復 Python 2 解釋器或 Python 標準庫中新發現的問題。但是,商業供應商可以自己維護 Python 2,而其他第三方可以對 Python 2 代碼庫進行分叉,并繼續核心團隊的工作。(稍后將更詳細介紹)
  • 第三方 Python 項目將放棄 Python 2。 而那些同時支持 Python 2 和 Python 3 的庫將開始把資源專門投入 Python 3。這些項目中有許多是志愿者運行的,只支持一種語言版本的話,工作量就要少得多。每個項目都將決定是否支持 Python 2,但許多主要的 Python 2 項目承諾到 2020 年才完全放棄對 Python 2 的支持。
  • 對 Python 2 的平臺支持將會減弱。 Linux 發行版和云服務提供商可能會繼續包含 Python 2 運行時。但隨著時間的推移,預計對 Python 2 的支持將會逐漸減弱。幾乎可以肯定的是,在云平臺上仍然可以運行 Python 2 的容器化版本,但是不能保證云服務提供商將繼續維護自己的 Python 2 容器。

如果你被困在 Python 應用程序中,那么如何應對缺少 Python 2 支持的情況?從長遠來看,最好的辦法是找到一種能夠消除對 Python 2 所有依賴項的策略。但這只是眾多選擇中的一個。

從 Python 2 過渡到 Python 3

根據代碼庫的大小和外部依賴關系,將 Python 2 過渡到 Python 3 可能比你預期的更容易。Python 的官方文檔有一些簡單的步驟,你可以通過這些步驟來確定你的項目是否“永不過時”,也就是說,可以在 Python 3 中使用,只需很少的調整或者無需任何調整。你可以采取的最好的第一步就是,使用caniusepython3包來找出那些組件或依賴項(如果有的話)會阻止遷移。

如果你堅持使用 Python 2,是因為某個應用程序的某個特定組件只能在 Python 2 上才能用的話,那么就要從這個組件開始過渡。查看是否存在兼容 Python 3 的替代方案,然后從該點向外重建應用程序。這一想法是找出你對 Python 2 依賴所在的最小位置,并解決它們。

如果你必須以某種形式繼續使用 Python 2,那么至少可以做的就是從遷移到最新版本的 Python 2(截止本文成稿時為 Python 2.7.16)開始,并將其作為 Python 3 的出發點。這樣,你就可以從 Python 2.7 在其正式生命周期結束之前提供的 Bug 修復獲益。

使用替代的 Python 2 運行時

如果修改 Python 2 代碼庫不是一個可行的建議,那么另一種選擇是使用由第三方開發的不同的 Python 2 運行時。替代的 Python 2 運行時可能比 Python 2 本身具有更長的支持窗口。

Tauthon

https://github.com/naftaliharris/tauthon

據該項目的自述文件稱,Tauthon 是 Python 2.7.16 的一個分支,具有從 Python 3.x 派生出來的新語法、內置函數和庫。只要維護者能夠提供,Tauthon 還包括為該語言提供修復和補丁。理論上,Tauthon 應該作為 Python 2.7 的替代品。截止本文成稿時的最新版本 Tauthon 2.8 就包括函數注釋、強制關鍵詞參數、async/await語法以及以前僅在 Python 3 中可用的其他功能。

PyPy

https://pypy.org/

PyPy 是 Python 的即時加速運行時,它使用 Python 2 作為其內部基礎架構的關鍵部分,并且長期以來一直支持 Python 2 作為其主要版本。該項目的文檔聲稱“由于 RPython(PyPy 的基?。┕菇ㄔ?Python 2 之上,而這種情況既不可能改變,也就是說,只要 PyPy 本身存在,那么 PyPy 的 Python 版本就會永遠存在?!鋇?PyPy 可能會對一些依賴于 C 擴展的一些 Python 包造成兼容性或性能問題,盡管 PyPy 開發團隊一直在努力解決這些問題。

IronPython

https://ironpython.net/

IronPython 是.Net 運行時的 Python 實現,它的 Python 2 版本仍然得到了主動的支持。它目前的開發人員名單已經宣布,他們為了將精力集中在 IronPython,因此不太可能在 2020 年后繼續支持 Python 2。但是,這并不意味著其他人不能繼續提供自己的支持。

Cython

https://cython.org/

另一種可能是 Cython,盡管支持窗口有限。Cython 將 Python 編譯為 C,并提供可選的類型以增強功能。并且,從一開始就支持 Python 2??梢允褂?Cython 將 Python 2 代碼轉換成 C,以繼續作為“凍結的”二進制文件來使用。這樣做甚至可以提高性能,這要取決于應用程序的性質。(主要是受 I/O 的限制,程序不會有太大的改進。)

不過,Cython 計劃在今年年底放棄對 Python 2 的支持。除此之外,你將會陷入使用 Cython 的舊版本繼續運行舊版本的 Python 腳本的困境。

購買擴展的 Python 2 支持

一個長期的解決方案是獲得 Python 解決方案供應商的支持。ActiveState 是 ActivePython 發行版和 Komodo IDE 的創建者,為那些希望繼續使用 Python 2 的客戶,或者那些希望通過標識 Python 堆棧中必須在 Python 3 重寫的部分來遷移到 Python 3 的客戶提供支持。

一些供應商為 Python 2 提供支持,作為其在另一個受支持產品中的一部分。Red Hat 企業版 Linux 6 和 7 包含了 Python 2,因此,從 Red Hat 購買的針對這些版本的操作系統的任何支持合同都將包括在產品的支持生命周期內繼續支持 Python 2。

第三種選擇是向咨詢公司或承包商購買支持。他們能夠提供的支持程度會因你的需求和抱負而有所不同。它可能包括提出一個過渡計劃來放棄 Python 2 并重寫任何依賴的軟件(可能是最好的長期策略),或者手動將 Phthon 2 的補丁合并到運行時的自定義構建中(這做法雄心勃勃,而且還很復雜)。

自己維護 Python 2

Python 是一個開源項目。你自己完全可以自由地實現任何需要的修復。如果修復是對 Python 標準庫的修改,這通常不會太難,因為大多數 Python 標準庫本身就是用 Python 編寫的。但是如果你需要在標準庫使用的 C ??榛?CPython 解釋器進行更改,那將更具有挑戰性。因為你需要了解 C 并熟悉 CPython 的內部結構才能做到這一點。

什么都不做

如果它沒出故障,請不要試圖去修復它。這是許多企業在 Windows NT 和 Windows 2000 壽命終止時所采用的策略。理論上,僅供內部使用且未公開到公共互聯網的 Python 應用程序可以無限期運行。

虛擬機和容器化提供了在受控環境中保持這些類型的應用程序保持正常運行的方法。你可以將 Python 2 運行時的特定版本“凍結”到容器映像或者虛擬機中,以及它的標準庫、應用程序所需的??楹陀τ貿絳蟣舊?。

也就是說,任何遺留的應用程序,即使是沒有外部暴露的應用程序,都應該定期重新評估。不管在什么情況下,對 Python 2 用戶來說,最好的長期策略都是遷移到 Python 3。Python 2 盡管非常棒,但它真的已經過時了。

余下全文(1/3)
分享這篇文章:

請關注我們:

電子郵件地址不會被公開。 必填項已用*標注