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位的事实有关?
谢谢!
问题是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因此,如果您有任何其他问题,你一定要阅读手册页作为错误信息已敦促你做。
当试图从终端执行python2.6_32时,我收到“找不到命令”。 – Alex 2010-04-02 06:16:01
@Alex,您需要创建脚本,使其可执行,并将其放在您的路径中。你做过这些步骤了吗?它不是现成的。 – 2010-04-02 06:24:49
@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位。
@Ned,这是一个坏主意......所有必需的东西都已经安装完毕,这会掩盖64位版本。 – 2010-04-02 15:41:54
当我尝试使用这种方法时,我仍然得到“没有合适的64位架构” – Alex 2010-04-02 15:42:43
不,它不会“掩盖”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包含的蛇。
这使得一切对我来说都很好!到目前为止,这绝对是最简单的解决方案。 – 2012-06-06 04:16:06
自从cocoa安装程序正常工作以后,我必须同意Mike的意见! – okysabeni 2012-07-25 21:05:53
您打算告诉我们您的结果还是投票回复? – 2010-04-04 21:57:21