使用Python 3to2修复器集的问题

2 投票
1 回答
2985 浏览
提问于 2025-04-17 10:51

我刚开始学习编程,需要一些帮助,把用Python 3.x写的代码改成能在2.x版本上运行的代码。

我有Python 3.2,但是Spotify Puzzle的要求是代码必须用2.6版本写。因此,我找到了一个叫3to2的转换工具。我下载了“3to2_py3k-1.0.tar.gz”这个版本,可以从这里获取:https://bitbucket.org/amentajo/lib3to2

README文件里告诉我:

(...)运行"./3to2"来转换标准输入("-"),或者将文件或目录作为参数传入。(...)

这个网站上的文字和README文件是一样的。

我明白我应该在命令行里输入:

C:\Python32>3to2 Spotify.py

3to2不是内部或外部命令,也不是可运行的程序或批处理文件。

(这是从挪威语手动翻译过来的)。

我尝试过指定具体文件的路径,但没有找到名为“3to2”的文件。我也尝试直接指定“main.py”和“Spotify.py”文件,似乎有点反应(像是闪了一下,但没有错误),但是当我再次打开“Spotify.py”时,文件没有任何变化。

我非常感谢任何帮助。


谢谢你,spatz,这对我帮助很大。最后,我通过 cd C:\Python32>python.exe setup.py install 成功安装了这个包。

不过我还是遇到了一些问题。以 print("Hello World!") 程序为例。当我运行 python.exe 3to2 HelloWorld.py(没有python.exe是无法工作的)时,它的回应是:

 RefractingTool: Skipping implicit fixer: collections
 RefractingTool: Skipping implicit fixer: int
 RefractingTool: Skipping implicit fixer: memoryview
 RefractingTool: Skipping implicit fixer: printfunction
 RefractingTool: Skipping implicit fixer: inittest
 RefractingTool: Refactored HelloWorld.py
 --- HelloWorld.py   (original)
 +++ HelloWorld.py   (refactored)
 @@ -1 +1 @@
 -print("Hello World!")
 +print u"Hello World!"
 RefactoringTool: Files that need to be modified:
 RefactoringTool: HelloWorld.py

这让我很困惑。首先,它似乎跳过了一些修复,比如 printfunction。但后来,它确实把 print("Hello World!") 改成了 print u"Hello World!",这本来是应该的。问题是,当我在IDLE 3.2中打开这个文件时,文件还是原来的代码。Spotify.py文件也是一样。IDLE是不是“聪明”到能把这段简单代码改成兼容3.x的,还是说3to2的修复工具不管用?


解决办法: 我搞明白了。我需要加上 -w 作为参数。这样就能在创建备份文件 .bak 的同时,直接修改原文件。

感谢所有帮助过我的人!

1 个回答

5

看起来你没有正确安装 3to2。要安装它,请按照以下步骤操作:

  1. 把你下载的 .tar.gz 文件解压到某个文件夹里。
  2. 进入那个文件夹,然后运行 python setup.py install

现在你可以进入包含 Spotify.py 的文件夹,然后运行 3to2 Spotify.py,应该就能正常工作了。

撰写回答