2014-12-03 76 views
1

我最近升级到python 3.4来使用连续工具,但我的许多脚本都是为2.7编写的。这可能会导致一些错误;有些简单的(如“打印”现在需要括号),但其他更复杂:运行多个python

if struct.unpack("h", "\0\1")[0] == 1: 
    defs.append(("WORDS_BIGENDIAN", None)) 

产生了错误:

File "setup.py", line 302, in build_extensions 
    if struct.unpack("h", "\0\1")[0] == 1: 
    TypeError: 'str' does not support the buffer interface 

是否有一种方式来运行我的Python代码2.X像你可以用C++(-std = C++ 11等)?如果我只是解决这个问题,可能会出现更多的错误。谢谢!

+0

我认为不是。你必须移植它。但是有这些工具。 – 2014-12-03 16:37:51

+1

有一个Python 2自带的'2to3.py'转换器,它会尝试为你更新你的代码。但也有可能你必须自己去做。 – 2014-12-03 16:38:31

+0

@ACSutton请记住投票回答有用的答案和评论,并将解决问题的答案标记为“已接受”。 – 2014-12-03 17:05:19

回答

0

Python 3里确实是一个不同的语言比Python 2.有没有办法让Python 3的解释器中运行的Python 2代码(除非该代码不HAPP zh使用任何已更改的功能)。

您可能想要阅读Python文档中的guide to porting to Python 3。这里是当前建议的简要摘要:

  • 如果你只需要从现在开始支持Python 3的(不需要维护的Python 2兼容),使用2to3工具翻译大部分代码,然后手动修复它错过的任何东西。如果您之前没有使用过Python 3,那么有很多解释版本间变化的文档。
  • 如果您正在编写新代码,并且需要能够使用两个Python版本运行它,请为Python 3(或者2和3的常见子集)编写代码,并根据需要将代码移植到Python 2。
  • 如果您有现有的Python 2代码库,并且您希望在不违反Python 2兼容性的情况下在Python 3上运行它,请使用像sixfrom future这样的库导入程序来帮助您将代码移植到两个Python版本的通用子集。 2to3和其他工具如modernize将帮助您找到可以改善事物的地方。请注意,如果您放弃支持较旧版本的Python 2,则更容易进行此项工作。
+0

不幸的是,这是事实。 2to3似乎是一个非常不完美的工具。我会玩'六'和'未来',看看这些是否有帮助。 – so860 2014-12-03 17:18:53

1

如果您已经安装了好几个版本,你可以改变你的Python脚本的第一行明确地使用x或3 x:

对于一个Python 2.x的脚本:

#!/usr/bin/env python2 

,或者对于一个python脚本3.X:

#!/usr/bin/env python3 
+0

你能证实这一点吗?我收到一个错误“bash:./program_name.py:Permission denied” – so860 2014-12-03 17:11:41

+0

是的,我刚刚在我的shell中尝试了这个。请注意,这只有在你的系统上安装了python2和python3时才能使用。同样,从控制台运行python时,您可以通过调用'python2'或'python3'显式运行交互式python会话。 – 2014-12-03 17:13:11

+0

谢谢,但我仍然收到错误。我试图将Image模块添加到我的Python 3.4发行版中,但是除了在Python 3.4中未明确支持它之外,它可能根本不起作用...... – so860 2014-12-03 17:18:19