4

因此,随着 Python 3.0(现在是 3.1)的最终版本,很多人都面临着如何在不因向后不兼容而丢失一半代码库的情况下进行升级的担忧。

人们对于避免转向下一代 python 几乎不可避免会导致的许多陷阱的最佳技巧是什么?

可能一个好的起点是“使用 2to3 将你的 python 2.x 代码转换为 3.x”:-)

4

3 回答 3

3

首先,这个问题与您打算如何处理向 Python 3 的迁移非常相似?. 检查那里的答案。

Python Wiki中还有一个关于将应用程序移植到 Python 3.x的部分

python 3.0的发行说明包含有关移植的部分。我引用了那里的提示:

  1. (先决条件:)从出色的测试覆盖率开始。
  2. 移植到 Python 2.6。这应该不会比从 Python 2.x 到 Python 2.(x+1) 的平均 por 多。确保所有测试都通过。
  3. (还在用2.6:)打开-3命令行开关。这会启用有关将在 3.0 中删除(或更改)的功能的警告。再次运行您的测试套件,并修复您收到警告的代码,直到没有警告留下,并且您的所有测试仍然通过。
  4. 在源代码树上运行 2to3 源到源转换器。(有关此工具的更多信息,请参阅 2to3 - 自动 Python 2 到 3 代码翻译。)在 Python 3.0 下运行翻译结果。手动修复任何剩余的问题,修复问题,直到所有测试再次通过。

不建议尝试编写在 Python 2.6 和 3.0 下都运行不变的源代码;您必须使用非常扭曲的编码风格,例如避免打印语句、元类等等。如果您正在维护一个需要同时支持 Python 2.6 和 Python 3.0 的库,最好的方法是通过编辑 2.6 版本的源代码并再次运行 2to3 转换器来修改上面的步骤 3,而不是编辑 3.0 版本的源代码。

于 2009-07-02T01:00:39.727 回答
3

我为此写了一本免费的书。你可以在这里阅读它:

http://python3porting.com/

简而言之:

  1. 确保所有第三方库都可用于 Python 3。
  2. 通过消除常见的歧义来准备您的代码:
    • 如果你真的想要整数除法,请使用 //。
    • 确保在打开二进制文件时使用“b”标志标记二进制文件,以清楚地表明您的意思是数据是否为二进制。
  3. 测试覆盖率越高越好。
  4. 确保它在“Python 2.7 -3”下运行而没有警告。
  5. 现在运行 2to3。
  6. 修复任何错误。

就是这样,或多或少。

于 2009-07-02T04:05:29.737 回答
2

如果没有真正令人信服的升级理由,我会坚持使用有效的方法。我查看了升级我每天使用的脚本,但工作量太大而我看不到任何好处。

“如果它没有坏,就不要修理它!”

于 2009-07-02T01:00:57.230 回答