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

如何将一个大型的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 功能可能会出现问题。重写代码库解决了这个问题,也让我们有机会升级我们长期以来想要做的任何代码块。

立即学习“Python免费学习笔记(深入)”;

但是,此方法仅在代码库具有较小的可扩展大小时才有效。

方法 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_importfrom __future__ import divisionfrom __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 abcexcept 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?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2225279.html

(0)
上一篇 2025年2月26日 11:12:40
下一篇 2025年2月26日 11:12:56

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Linux中的重定向全面解析

    这篇文章主要介绍了浅析linux中重定向问题,需要的朋友可以参考下 简介       在计算领域,重定向是大多数命令行解释器所具有的功能,包括各种可以将标准流重定向用户规定地点的Unix shells。类Unix操作系统的程序可以通过dup…

    编程技术 2025年3月30日
    000
  • root和普通用户在ubuntu中的切换方法

    下面小编就为大家带来一篇ubuntu中root和普通用户切换方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ubuntu登录后,默认是普通用户权限,那么普通用户权限和root权限如何切换呢,下面总…

    编程技术 2025年3月30日
    100
  • Linux中关于内核链表的代码实例分享

    这篇文章主要介绍了linux中的内核链表实例详解的相关资料,链表中一般都要进行初始化、插入、删除、显示、释放链表,寻找节点这几个操作,需要的朋友可以参考下 Linux中的内核链表实例详解 链表中一般都要进行初始化、插入、删除、显示、释放链表…

    编程技术 2025年3月30日
    100
  • linux下如何利用docker-thunder-xware进行离线下载的实例详解

    这篇文章主要介绍了linux下使用docker-thunder-xware进行离线下载的方法,感兴趣的朋友一起看看吧 1.环境: lsb_release -ahello@jhello:~$ lsb_release -aNo LSB modu…

    编程技术 2025年3月30日
    100
  • Linux中有关LVS NAT的配置步骤

    这篇文章主要介绍了linux 中lvs nat 配置步骤的详解的相关资料,这里列出详细的实现步骤,需要的朋友可以参考下 Linux 中LVS NAT 配置步骤的详解 概要:      规划机器与IP地址,LVS集群中有三种类型机器4种IP地…

    编程技术 2025年3月30日
    100
  • Linux中firewall的使用详解

    这篇文章主要介绍了linux 中firewall的使用方法总结的相关资料,这里提供了使用的命令帮助大家学习理解,需要的朋友可以参考下 Linux 中firewall的使用方法总结  firewall 简单使用  1,显示所有配置 firew…

    编程技术 2025年3月30日
    100
  • linux如何创建用户useradd命令的示例详解

    本文通过代码示例给大家介绍了adduser与useradd命令二者的关系 以及使用useradd命令添加用户的方法,需要的朋友参考下吧 一,adduser与useradd命令二者的关系  代码示例: [root@larrywen opt]#…

    编程技术 2025年3月30日
    100
  • Linux中inode用法教程

    这篇文章主要给大家介绍了在linux中关于inode的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 背景 最近在复习Linux命令,到df的时候发现了一个之前忽略的东西。也就是 -i 这个选项,…

    编程技术 2025年3月30日
    100
  • 如何在linux下建站目录分配权限

    在建站的时候给目录分配权限是非常重要的,也是建站的程序员们必须要会的,下面这篇文章主要给大家总结了在linux下建站目录分配权限的经验技巧,需要的朋友可以参考借鉴,下面来一起看看吧。 前言 在网上搜索网站文件夹权限配置一般都是是: 文件夹权…

    编程技术 2025年3月30日
    100
  • Linux find15个常用命令

    [导读] 除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易。本文将介绍15种无论是于新手还是老鸟都非常有用的linux find命令。首先,在你的home目录下面创 除了在一个目…

    编程技术 2025年3月30日
    100

发表回复

登录后才能评论