当前位置:主页 > 捏脸代码 >   > 如何将项目完美迁移到Python3?

如何将项目完美迁移到Python3?

发布时间:2022-09-06 12:01:04 源自:佚名 阅读(13

本文主要讲解“如何将项目完美迁移到Python3”,感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让小编带你学习《如何将项目完美迁移到Python3》!

1、使用2to3

从几年前开始,Python 就附带了一个你可能不知道的名为 2to3 的脚本,它可以帮助你自动将大部分代码从 Python 2 转换为 Python 3。

这是一段用Python编写的代码2.6:

怎么将项目完美迁移到Python3中

在上面执行一个 2to3 脚本:

怎么将项目完美迁移到Python3中

默认情况下,2to3 仅标记在迁移到 Python 3 时必须修改的代码。输出中显示的 Python 3 代码是直接可用的,但您可以在 2to3 -write 参数中添加 -w 或 - 以便它可以修改您的Python 2 代码文件直接按照给定方案编写。

怎么将项目完美迁移到Python3中

2to3脚本不仅对单个文件有效完美世界怎么改代码,还可以对一个目录下的所有Python文件使用,还可以递归地对子目录下的所有Python文件有效。

2、使用 Pylint 或 Pyflakes

有一些坏代码在Python 2下运行良好,但在Python 3下或多或少报错的情况并不少见。因为这些坏代码不能通过语法转换来修复,所以2to3对它们没有影响,但会产生使用 Python 3 运行时出现错误。

要找出这一点,您需要使用 Pylint、Pyflakes(或 flake8 包装器)等工具。其中,我更喜欢 Pyflakes,它忽略了代码风格的差异,在这方面与 Pylint 不同。虽然代码之美是 Python 的一大特色,但在代码迁移的层面上,“保持代码功能一致”无疑比“保持代码风格一致”重要得多。

以下是 Pyflakes 的示例输出:

怎么将项目完美迁移到Python3中

上述 Pyflakes 的输出清楚地显示了代码中需要修复的内容。相比之下,Pylint 最多输出 143 行内容,其中大部分是代码缩进等无关紧要的问题。

值得注意的是第 19 行的误导性错误。从输出中您可能会认为 cmp 是一个在使用之前未定义的变量,实际上 cmp 是 Python 2 中的内置函数,在 Python 3 中被删除.而且这段代码是放在一个try块中的,除非你仔细检查这段代码的输出值,否则这个问题很容易被忽略。

怎么将项目完美迁移到Python3中

在代码迁移过程中,你会发现很多以前在 Python 2 中工作的函数都发生了变化,甚至在 Python 3 中直接被移除了。比如 PySide 的绑定方式发生了变化,importlib 替换了 imp,等等。此类问题只能一一解决,所涉及的功能是否需要重构或者干脆放弃,还需要自己权衡。但就目前而言,大多数问题都是已知的并且有据可查。所以难点不在于解决问题,而是找到问题所在,从这个角度来看,使用Pyflake是很有必要的。

3、修复损坏的 Python 2 代码

虽然 2to3 脚本可以帮助您将代码更改为与 Python 3 兼容的形式,但对于完整的代码库来说它有点用处,因为一些较旧的代码可能需要 Python 3 express 中的不同结构。这种情况下只能手动修改。

例如,以下代码在 Python 2.6 中可以正常工作:

怎么将项目完美迁移到Python3中

像 2to3 和 Pyflakes 这样的自动化工具不会检测到问题,但是如果上面的代码是用 Python 3 运行的,解释器会认为 CLOCK_SPEED.TICKS_PER_SECOND 没有明确定义。因此,需要将代码改为面向对象的结构:

怎么将项目完美迁移到Python3中

您可能认为如果将 TICKS_PER_SECOND() 重写为构造函数(使用 __init__ 函数设置默认值)完美世界怎么改代码,代码看起来会更清晰,但这需要更改此方法的调用,从 CLOCK_SPEED.TICKS_PER_SECOND()更改为 CLOCK_SPEED(),这样的更改会对整个库产生或多或少的未知影响。如果你对整个代码库的结构有很好的把握,你确实可以随心所欲地做出这样的改变。但我一般认为,每当我进行更改时,可能至少会影响其他代码中的三个地方,因此我宁愿不更改代码的结构。

至此,相信大家对“如何将项目完美迁移到Python3”有了更深的理解,那就来试试吧!这里是长城资源网的网站。更多相关内容,可进入相关频道查询,关注我们,继续学习!


相关文章

网站地图 © 2020 - 看开服 蜀ICP备2022016416号-4 免责声明

完美国际私服是中国第一开服网,全年365天保持不间断更新,您可以在这里获得专业的完美私服信息,完善的新完美世界私服网游戏攻略专区,是玩家首选的网络游戏资讯门户网站。

所有作品版权归原创作者所有,与本站立场无关,如不慎侵犯了你的权益,请联系(搜搜搜完美国际私服-www.ssswm.com)告知,我们将做删除处理!