2to3 是一个 Python 程序,它可以读取 Python 2.x 的源代码并使用一系列的修复器 来将其转换为合法的 Python 3.x 代码。 标准库已包含了丰富的修复器,这足以处理几乎所有代码。 不过 2to3 的支持库lib2to3是一个很灵活通用的库,所以还可以编写你自己的 2to3 修复器。使用 2to3¶
2to3 通常会作为脚本和 Python 解释器一起安装,你可以在 Python 根目录的Tools/scripts文件夹下找到它。
2to3 的基本调用参数是一个需要转换的文件或目录列表。对于目录,会递归地寻找其中的 Python 源码。
这里有一个 Python 2.x 的源码文件,example.py:
defgreet(name):print"Hello,{0}!".format(name)print"What's your name?"name=raw_input()greet(name)
它可以在命令行中使用 2to3 转换成 Python 3.x 版本的代码:
$ 2to3 example.py
这个命令会打印出和源文件的区别。通过传入-w参数,2to3 也可以把需要的修改写回到原文件中(除非传入了-n参数,否则会为原始文件创建一个副本):
$ 2to3 -w example.py
在转换完成后,example.py看起来像是这样:
defgreet(name):print("Hello,{0}!".format(name))print("What's your name?")name=input()greet(name)
注释和缩进都会在转换过程中保持不变。
默认情况下,2to3 会执行预定义修复器 的集合。使用-l参数可以列出所有可用的修复器。使用-f参数可以明确指定需要使用的修复器集合。而使用-x参数则可以明确指定不使用的修复器。下面的例子会只使用imports和has_key修复器运行:
$ 2to3 -f imports -f has_key example.py
这个命令会执行除了apply之外的所有修复器:
$ 2to3 -x apply example.py
有一些修复器是需要显式指定 的,它们默认不会执行,必须在命令行中