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

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

介绍

Python最初开始时是Python 2版本,也被称为 遗留版本Python 2.7是最后一版Python 2,于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代码库

  • 使用移植过程

方法1:重写整个Python 2代码库

这种升级代码库的方式只对小型软件有用。这是因为任何正在升级代码库的人都需要对整个代码库的工作原理有一个总体掌握。将代码重写为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兼容性

设置文件中的分类器必须更新为Programming language :: Python :: 3。这将允许在编码环境中仅存在Python 3或某些版本的Python 3(还提供特定版本分类器),从而防止不必要的回溯到Python 2代码。这将在很大程度上有助于维护代码完整性,并允许整个代码库仅存在于Python 3中。

使用Modernize或Futurize脚本

由于Python 3不向后兼容,因此必须将代码库中的所有脚本升级到Python 3标准。在这里,我们可以在需要升级的每个这样的模块开头使用Modernize或Futurize脚本。并非所有Python功能都会在模块中使用,但是必须Modernize一些基本函数,以确保任何模块运行顺畅。因此,官方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字节的行为方式与遗留Python中的旧字符串不同。

拥有良好的测试覆盖率

拥有良好的测试覆盖率非常重要,可以避免bug,并仅在需要更改的位置进行更短的代码升级。Coverage.py等工具在这种情况下非常有帮助,通过找出执行的区别和错误来找出确切位置的故障。

结论

在这里,我们已经介绍了一些将大型软件代码库从Python 2迁移到Python 3的方法,以及应该注意的一些限制和可以使用的一些有用方法。但是,这个过程可能会因考虑的代码库和项目中使用的库和模块而有所不同。这些通用步骤通常可以将大多数代码库转换为Python 3并现代化Python代码。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程