繁体   English   中英

WxPython与Snow Leopard不兼容?

[英]WxPython Incompatible With Snow Leopard?

最近我升级到Snow Leopard,现在我无法运行使用wxPython构建的程序。 我得到的错误是(来自Eclipse + PyDev):

  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)

我真的不了解他们,如果你能帮助我这样做,我会很感激,如果你知道发生了什么,我该怎么办呢? 也许这与Snow Leopard是64位的事实有关?

谢谢!!

问题是WxPython仅在32位模式下在Mac上可用; 但是,默认情况下,Python将以64位模式启动。 要解决此问题,请创建以下名为python_32 shell脚本:

#! /bin/bash
export VERSIONER_PYTHON_PREFER_32_BIT=yes
/usr/bin/python "$@"

使脚本可执行( chmod a+x python_32 )并将脚本放在路径中。 现在,只需调用python_32即可获得一个交互式Python控制台,您可以在其中使用WxPython。 如果你想编写一个使用它的Python脚本,你可以使用shebang: #! /usr/bin/env python_32 #! /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中)。

资源
我应该指出,两个推荐都是基于Mac OS X上的man python 。所以,如果你有任何其他问题,你一定要阅读手册页,因为错误信息已经催促你这样做了。

虽然我看到这已经得到了回答,但答案有点错误。 2.9系列DOES具有Mac 64位版本,尽管仅适用于Python 2.7。 请参阅http://wxpython.org/download.php并查找Cocoa构建。 从我在wxPython邮件列表和IRC频道上收集到的内容,您将需要从python.org下载Python 64位版本,而不是使用包含Mac的蛇。

您可能还想在调用python时尝试arch命令: arch -i386 /usr/bin/python2.6如果无法使用正确的环境设置运行Python。 '-i386'开关在Intel 32位模式下运行通用二进制。 '-x86_64'使其在Intel 64位模式下运行。 -ppc和-ppc64用于PPC体系结构。

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

另一个解决方案是从python.org下载并安装适用于OS X的Python 2.6,并从此处安装适用于OS X的wxPython。 python.org 2.6比Snow Leopard中Apple提供的Python(2.6.1)更新(目前为2.6.5),仅为32位。

这对我有用(来自http://www.python-forum.de/viewtopic.php?f=19&t=24322&view=previous

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

然后用py32调用你的脚本

嗯。 提供的脚本对我不起作用 - 我将其更改如下:

#! /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安装(对我的工作来说更容易),我想避免任何更荒谬的黑客攻击

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM