首頁 >後端開發 >Python教學 >如何將一個大型的Python 2程式碼庫更新到Python 3?

如何將一個大型的Python 2程式碼庫更新到Python 3?

WBOY
WBOY轉載
2023-09-04 17:09:081158瀏覽

如何将一个大型的Python 2代码库更新到Python 3?

簡介

Python 最初是作為 Python version2 開始的,也稱為「Legacy Edition」。 Python2 的最後一個版本是 Python2.7,於 2020 年停止使用。 Python 3.x 是作為替代品引入的,與 Python 2.x 版本相比,進行了大量改進和錯誤修復。較舊的舊版 Python 是 LTS 軟體,這意味著它擁有長期支援。然而,Python 3.x 版本是向後不相容的版本,這使得將 Python 2 程式碼庫升級到 Python 3 非常有必要,以充分享受 Python 3 的易用性和支援。開發人員升級到 Python 3 的最大原因可以列舉a) 開發人員生產力(因為它是動態類型的,非常容易學習和編寫程式碼)和 b) 效能改進,包括在大多數任務中更快的效能。

更新到Python3的方法

  • 用 Python 3 重寫程式碼庫

  • 使用移植過程

#方法一:重寫整個程式碼庫

這種升級程式碼庫的方法僅在小規模建立軟體時才有用。這是因為任何升級程式碼庫的人都需要對整個程式碼庫的工作方式有一個總體了解。用Python 3重寫程式碼可以幫助實現Python 3的功能和易用性,從而可以縮短程式碼並提高效率。此外,如果使用其他方法遷移程式碼庫,則在遷移整個程式碼庫之前,實作 Python 3.x 功能可能會出現問題。重寫程式碼庫解決了這個問題,也讓我們有機會升級我們長期以來想要做的任何程式碼區塊。

但是,此方法僅在程式碼庫具有較小的可擴展大小時才有效。

方法 2:使用移植過程

另一方面,我們可以使用文件中官方描述的Python移植過程。從較高的層面來看,這種移植是一個三步驟過程 -

  • 自動轉換

  • 手動更改

  • 運行時驗證和修復

#但是,所有這一切的先決條件是首先安裝 Python 3 及其相關的套件和程式庫。讓我們看看 Windows 的流程。

下載並安裝 -

https://www.python.org/ftp/python/3.7.4/python-3.7.4.exe

這將安裝 Python 軟體。之後,可以使用官方的 Python 2 到 Python 3 移植模組或軟體(例如 2to3 等)開始移植過程。這會將程式碼移植到 Python 3 中,但必須注意以下問題 -

更新Setup.py 檔案以表示Python3 相容性

安裝檔案中的分類器必須更新為包含程式語言 :: Python :: 3 。這將只允許 Python 3 或其某些版本存在於編碼環境中(特定版本分類器也可用),從而防止不必要地回溯到 Python 2 程式碼。這將極大地幫助維護程式碼完整性,並允許整個程式碼庫僅存在於 Python 3 中。

使用現代化或未來化腳本

由於 Python 3 不向後相容,因此程式碼庫中的所有腳本都必須升級到 Python 3 標準。在這裡,我們可以在每個需要升級的模組的開頭使用 Modernize 或 Futurize 等腳本。並非所有 Python 功能都會在模組中使用,但必須對一些基本功能進行現代化改造,以確保任何模組的順利運作。因此,為了安全起見,Python 官方文件建議添加以下程式碼 -

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function 

這確保了我們目前的程式碼不會因為一些基本的依賴關係而在 Python 3 下退化並停止運作。然而,更好的方法是使用 Pylink 項目,其中的 --py3k 標誌有助於指出我們的程式碼偏離 Python 3 相容性的情況。這可以防止在每個區塊的開頭單獨執行 Modernize 或 Futurize 腳本,從而縮短程式碼並減少錯誤,儘管需要注意的是 Pylint 僅支援 Python 3.4 或更高版本。

導入時使用功能偵測以確保版本相容性

在某些情況下,Python 2 程式碼庫可能包含無法在 Python 3 中執行的模組。透過使用功能檢測,我們可以了解先前的專案是否支援 Python 3 版本。使用功能檢測而不是版本檢測來檢查我們需要使用的正確版本是一種更安全的方法,這將防止將來出現更多問題。

try:
   from importlib import abc
except ImportError:
   from importlib2 import abc 

比較二進位和文字資料時進行檢查

在Python 3中,文字和二進位資料類型不能公然混合,因為這會導致錯誤。但此檢查無法使用任何其他Python 庫自動執行,因此最好運行自定義代碼塊來比較基於字符串和二進制的數據,原因是Python 3 bytes 的行為方式不同就像舊版Python 中的舊str 一樣。

具有良好的測試覆蓋率

擁有良好的測試覆蓋率對於防止錯誤非常重要,並且透過僅更改需要的地方來縮短升級程式碼所需的時間。 Coverage.py 等工具在這種情況下會發揮很大作用,透過找出執行的內容和錯誤之間的差異來找出確切位置的錯誤。

結論

在這裡,我們了解了將大型軟體程式碼庫從 Python 2 遷移到 Python 3 的一些方法,以及我們應該注意的一些限制和一些可以使用的有用方法。但是,該過程可能會在一定程度上有所不同,具體取決於所考慮的程式碼庫以及專案中使用的程式庫和模組。這些一般步驟確實可以以整體良好的方式將大多數程式碼庫轉換為 Python 3 並使 Python 程式碼現代化。

以上是如何將一個大型的Python 2程式碼庫更新到Python 3?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除