2014-12-03 78 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