18

最近升级到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 位的事实有关?

谢谢!!

4

6 回答 6

25

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

#!/bin/bash
导出 VERSIONER_PYTHON_PREFER_32_BIT=是
/usr/bin/python "$@"

使脚本可执行 ( 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 位模式提供。这反过来,

替代选项
我不建议这样做,因为我认为您应该保留默认值,但由于您可能没有足够的 shell 脚本知识(您需要使用“./python_32”或将其放在一个文件夹中在“$PATH”环境变量中列出并将其调用为“python_32”)以遵循前一个选项,您可能只想执行以下命令,这将使 32 位模式成为默认模式:

默认写入 com.apple.versioner.python Prefer-32-Bit -bool 是

如果您决定要切换回 64 位模式,则可以使用以下命令:

默认写入 com.apple.versioner.python Prefer-32-Bit -bool no

请注意,这两个命令都将在终端上执行(而不是在 Python 中)。

资料来源
我应该指出,这两个建议都是基于 Mac OS X 上的man python。所以,如果您有任何其他问题,您绝对应该阅读手册页,因为错误消息已敦促您这样做。

于 2010-04-02T05:59:54.100 回答
15

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

于 2010-10-27T19:12:41.397 回答
2

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

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

于 2010-10-11T16:58:45.490 回答
1

另一个解决方案是从python.org下载并安装适用于 OS X 的 Python 2.6,然后从这里安装适用于 OS X 的 wxPython 。python.org 2.6 比 Apple 提供的 Snow Leopard 中的 Python (2.6.1) 更新(截至目前为 2.6.5),并且它只有 32 位。

于 2010-04-02T08:08:14.720 回答
1

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

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

然后用 py32 调用你的脚本

于 2010-10-27T12:41:47.210 回答
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 安装(对我的工作来说更容易),并且我想避免任何更荒谬的黑客攻击

于 2010-04-05T05:21:09.240 回答