目錄
簡介
更新到Python3的方法
#方法一:重寫整個程式碼庫
方法 2:使用移植過程
更新Setup.py 檔案以表示Python3 相容性
使用現代化或未來化腳本
導入時使用功能偵測以確保版本相容性
比較二進位和文字資料時進行檢查
具有良好的測試覆蓋率
結論
首頁 後端開發 Python教學 如何將一個大型的Python 2程式碼庫更新到Python 3?

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

Sep 04, 2023 pm 05:09 PM

如何将一个大型的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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

在Linux終端中使用python --version命令時如何解決權限問題? 在Linux終端中使用python --version命令時如何解決權限問題? Apr 02, 2025 am 06:36 AM

Linux終端中使用python...

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? 如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

如何繞過Investing.com的反爬蟲機制獲取新聞數據? 如何繞過Investing.com的反爬蟲機制獲取新聞數據? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

See all articles