0

0

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

WBOY

WBOY

发布时间:2023-09-04 17:09:08

|

1679人浏览过

|

来源于tutorialspoint

转载

如何将一个大型的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移植过程。从较高的层面来看,这种移植是一个三步过程 -

  • 自动转换

  • 手动更改

  • 运行时验证和修复

    SDCMS-B2C商城网站管理系统
    SDCMS-B2C商城网站管理系统

    SDCMS-B2C商城网站管理系统是一个以php+MySQL进行开发的B2C商城网站源码。 本次更新如下: 【新增的功能】 1、模板引擎增加包含文件父路径过滤; 2、增加模板编辑保存功能过滤; 3、增加对统计代码参数的过滤 4、新增会员价设置(每个商品可以设置不同级不同价格) 5、将微信公众号授权提示页单独存放到data/wxtemp.php中,方便修改 【优化或修改】 1、修改了check_b

    下载

但是,所有这一切的先决条件是首先安装 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速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

754

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

636

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

758

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

618

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1262

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

577

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

707

2023.08.11

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号