WxPython与Snow Leopard不兼容?

问题描述:

最近我升级到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

问题是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

另一种解决方案是下载并安装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

嗯。提供的脚本不适用于我 - 我改变它如下:

#! /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安装(对于我的工作更容易),并且我想避免任何更可笑的黑客行为

您可能还想尝试arch命令在调用python时:​​,如果你不能让Python运行正确的环境设置。 '-i386'开关以英特尔32位模式进行通用二进制运行。 '-x86_64'使其以英特尔64位模式运行。 -ppc和-ppc64用于PPC体系结构。

如果仍然出现错误,则可能指向编译问题。在我的机器上,我有股票苹果Python和Macports的一个版本。拱命令使用苹果二进制文件,我可以从命令行成功导入wx,但我仍然从Macports二进制文件中得到错误:Bad CPU type in executable我猜我必须回去并重新编译我的Macports Python二进制文件,并确保它产生一个通用的二进制或类似的东西(叹气)。

这为我工作(从http://www.python-forum.de/viewtopic.php?f=19&t=24322&view=previous

在.profile文件,添加以下行 别名py32 ='拱-i386 /Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7 “

然后用 py32

调用脚本虽然我认为这已经回答了,回答是稍有不当。 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