升级到 Python 3.0 的建议?
随着Python 3.0(现在是3.1)的最终发布,很多人都在担心如何升级而不丢失一半的代码,因为新版本和旧版本不兼容。
大家有什么好的建议可以避免在切换到新一代Python时遇到的各种问题呢?
一个不错的起点是“使用2to3工具把你的Python 2.x代码转换成3.x” :-)
3 个回答
2
如果没有特别好的理由去升级,我建议还是用现在能用的东西。我看了一下我每天用的脚本,发现升级起来太麻烦,而且看不出有什么好处。
“如果它没有坏,就别去修!”
3
我写了一本免费的书,里面讲的就是这些内容。你可以在这里阅读:
简单来说:
- 确保你用的所有第三方库都支持Python 3。
- 准备你的代码,去掉一些常见的模糊之处:
- 如果你真的想要整数除法,就用 //。
- 打开二进制文件时,记得加上 'b' 标志,这样可以清楚地表明你是想处理二进制数据还是其他类型的数据。
- 你的测试覆盖率越高越好。
- 确保在“Python 2.7 -3”下运行时没有警告。
- 现在运行 2to3。
- 修复任何错误。
就这些,差不多就是这样。
3
首先,这个问题和你打算如何处理迁移到Python 3?这个问题很相似。可以去看看那里的回答。
在Python的维基上还有一个关于将应用程序迁移到Python 3.x的部分。
关于Python 3.0的发布说明中也有一部分讲到迁移。我在这里引用一些建议:
- (前提条件:)首先要有很好的测试覆盖率。
- 先迁移到Python 2.6。这一步的工作量应该和从Python 2.x迁移到Python 2.(x+1)差不多。确保所有测试都能通过。
- (仍在使用2.6:)开启命令行的-3选项。这会开启关于在3.0中将被移除(或改变)的特性的警告。再次运行你的测试套件,修复那些有警告的代码,直到没有警告,并且所有测试仍然通过。
- 使用2to3工具对你的源代码进行转换。 (想了解更多这个工具的信息,可以查看2to3 - 自动化Python 2到3的代码转换。)在Python 3.0下运行转换后的结果。手动修复任何剩下的问题,直到所有测试再次通过。
不建议尝试编写在Python 2.6和3.0下都能不变运行的源代码;这样你需要使用非常复杂的编码风格,比如避免使用打印语句、元类等等。如果你在维护一个需要同时支持Python 2.6和Python 3.0的库,最好的方法是修改上面第3步,编辑2.6版本的源代码,然后再次运行2to3工具,而不是编辑3.0版本的源代码。