2010-04-02 49 views
18

最近我升級到Snow Leopard,現在我無法運行使用wxPython構建的程序。我得到的錯誤(在Eclipse + PyDev的):WxPython與Snow Leopard不兼容?

import wx 
    File "/var/tmp/wxWidgets/wxWidgets-13~231/2.6/DSTROOT/System/Library/Frameworks 
    /Python.framework/Versions/2.6/Extras/lib/ 
    python/wx-2.8-mac-unicode/wx/__init__.py", line 45, in <module> 

    File "/var/tmp/wxWidgets/wxWidgets-13~231/2.6/DSTROOT 
    /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib 
    /python/wx-2.8-mac-unicode/wx/_core.py", line 4, in <module> 
    ImportError:/System/Library/Frameworks 
    /Python.framework/Versions/2.6/Extras/lib/python 
    /wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture 
    (see "man python" for running in 32-bit mode) 

我真的不理解他們,並希望如果你能幫助我這樣做,也是,如果你不知道這是怎麼回事,怎麼能我去修理它們?也許這與雪豹是64位的事實有關?

謝謝!

+2

您打算告訴我們您的結果還是投票回覆? – 2010-04-04 21:57:21

回答

25

問題是WxPython僅在32位模式的Mac上可用;但是,默認情況下,Python將以64位模式啓動。要解決此問題,創建一個名爲python_32下面的shell腳本:

 
#! /bin/bash 
export VERSIONER_PYTHON_PREFER_32_BIT=yes 
/usr/bin/python "[email protected]" 

使腳本可執行(chmod a+x python_32),並把腳本路徑中。現在,只需調用python_32即可獲得一個交互式Python控制檯,您可以在其中使用WxPython。如果你想編寫一個使用它的Python腳本,你可以使用shebang:#! /usr/bin/env python_32

現在來解釋...基本問題是32位和64位代碼使用不同的應用程序二進制接口(ABI),因此32位代碼和64位代碼不能共存於同一個庫中/可執行/過程。爲了支持64位模式,它需要被編譯爲64位模式;同樣,爲了支持32位模式,它需要以32位模式編譯。在OS X下,可以使用通用二進制文件來支持這兩種方式......但是,它需要在兩種模式下編譯(然後合併)。 WxWidgets可能使用Carbon,它只能在32位模式下使用(Cocoa可用於32位和64位模式...... Apple不打算在兩種模式下使用Carbon,因爲它已被棄用),這可以解釋爲什麼WxPython只能以32位模式提供。這反過來又意味着在Python中使用它需要你以32位模式啓動Python(Python是一個通用的二進制文件,它的32位和64位版本都可以在同一個二進制文件中使用,所以它可以是以任一模式啓動)。

方案選擇
我不建議這樣做,因爲我認爲你應該保留默認值,因爲他們,但因爲你可能沒有足夠的shell腳本知識(你需要使用」 ./python_32"或者將其放置在「$ PATH」環境變量中列出的文件夾中,並將其作爲「python_32」調用)以遵循前一選項,則可能只需執行以下命令,該命令將使32位模式成爲默認值:

 
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes 

如果您決定要切換回64位模式,則可以使用以下命令:

 
defaults write com.apple.versioner.python Prefer-32-Bit -bool no 

請注意,這兩個命令都要在終端上執行(不在Python中)。

來源
我應該指出的是,這兩個recomendations基於man python在Mac OS X因此,如果您有任何其他問題,你一定要閱讀手冊頁作爲錯誤信息已敦促你做。

+0

當試圖從終端執行python2.6_32時,我收到「找不到命令」。 – Alex 2010-04-02 06:16:01

+0

@Alex,您需要創建腳本,使其可執行,並將其放在您的路徑中。你做過這些步驟了嗎?它不是現成的。 – 2010-04-02 06:24:49

+0

@Alex,你能告訴我你在命令行上輸入了什麼,是否按照指示創建了腳本,腳本是在哪裏創建的,以及「$ PATH」的值是什麼? – 2010-04-02 18:46:33

1

另一種解決方案是下載並安裝Python 2。6 for OS X從python.org並安裝wxPython for OS X從here與它。 python.org 2.6比Snow Leopard中Apple提供的Python(2.6.1)更新(2.6.5),它只有32位。

+0

@Ned,這是一個壞主意......所有必需的東西都已經安裝完畢,這會掩蓋64位版本。 – 2010-04-02 15:41:54

+1

當我嘗試使用這種方法時,我仍然得到「沒有合適的64位架構」 – Alex 2010-04-02 15:42:43

+0

不,它不會「掩蓋」64位版本。在OS X系統上安裝多個Python版本是完全正確的。而且,正如我所提到的,在2.6.5中有最新的修補程序是有優勢的。使用多個版本的關鍵是正確管理您的執行PATH。要使用2.6的python.org版本,請確保$ PATH中的/ Library/Frameworks/Python.framework/Versions/2.6/bin出現在'/ usr/bin'之前。 python.org軟件包安裝了一個腳本命令('/ Applications/Python 2.6/Update Shell Profile.command'),它將爲你修改'.bash_profile'和'.profile'。 – 2010-04-02 18:12:57

0

嗯。提供的腳本不適用於我 - 我改變它如下:

#! /bin/bash 
echo "-----------------Python 2.6 - 32 Bit setup --------------------" 
echo "Running" $1 
export VERSIONER_PYTHON_PREFER_32_BIT yes 
/usr/bin/python2.6 $1 

仍然沒有工作。我收到了同樣的信息。重新閱讀手冊頁,以確保我是不是誤會,我沒有進一步向前:

ImportError: /usr/local/lib/wxPython-unicode-2.8.10.1/lib/python2.6/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture (see "man python" for running in 32-bit mode) 

真的不知道爲什麼這是行不通的,除非有某種重建需要的可以針對wx內核來完成,它具有32/64位兼容性。任何建議,任何人?我想使用Apple提供的開箱即用的Python安裝(對於我的工作更容易),並且我想避免任何更可笑的黑客行爲

2

您可能還想嘗試arch命令在調用python時:​​,如果你不能讓Python運行正確的環境設置。 '-i386'開關以英特爾32位模式進行通用二進制運行。 '-x86_64'使其以英特爾64位模式運行。 -ppc和-ppc64用於PPC體系結構。

如果仍然出現錯誤,則可能指向編譯問題。在我的機器上,我有股票蘋果Python和Macports的一個版本。拱命令使用蘋果二進制文件,我可以從命令行成功導入wx,但我仍然從Macports二進制文件中得到錯誤:Bad CPU type in executable我猜我必須回去並重新編譯我的Macports Python二進制文件,並確保它產生一個通用的二進制或類似的東西(嘆氣)。

15

調用腳本雖然我認爲這已經回答了,回答是稍有不當。 2.9系列有一個Mac 64位版本,儘管只適用於Python 2.7。請參閱http://wxpython.org/download.php並查找Cocoa構建。從我在wxPython郵件列表和IRC頻道收集的內容中,您將需要從python.org下載Python 64位版本,而不是使用Mac包含的蛇。

+0

這使得一切對我來說都很好!到目前爲止,這絕對是最簡單的解決方案。 – 2012-06-06 04:16:06

+0

自從cocoa安裝程序正常工作以後,我必須同意Mike的意見! – okysabeni 2012-07-25 21:05:53