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

WBOY
WBOY 转载
2023-09-04 17:09:08 685浏览

如何将一个大型的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,如有侵犯,请联系admin@php.cn删除