2

我想开始尝试使用 PyObjC 开发一些简单的应用程序。我安装了 PyObjC 和 Xcode 模板。我知道 PyObjC 本身可以工作,因为我已经成功运行了这个脚本。当我尝试从 Cocoa-Python 应用程序模板创建一个项目并运行它时,我收到了这个错误:

回溯(最近一次通话最后):
  文件“main.py”,第 10 行,在
    导入对象
  文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyObjC/objc/__init__.py”,第 25 行,在
    从 _convenience 进口 *
  文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyObjC/objc/_convenience.py”,第 21 行,在
    从 itertools 导入 imap
ImportError:dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/itertools.so,2):找不到合适的图像。发现:
    /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/itertools.so:mach-o,但架构错误
2010-02-08 19:40:09.280 TestApplication[3229:a0f] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“/Users/icktoofay/Desktop/TestApplication/main.m:44 main() PyRun_SimpleFile文件“/Users/icktoofay/Desktop/TestApplication/build/Debug/TestApplication.app/Contents/Resources/main.py”失败。见控制台错误。

当我尝试打开一个普通的 Python 提示符并导入itertools时,没有错误。我在 Mac OS X 10.6 Snow Leopard 上使用来自 MacPorts 的 Python 2.6.4。

我会很感激任何帮助。

4

1 回答 1

3

您有 32 位与 64 位的问题。看来您正在使用从 MacPorts 安装的 Python 2.6,显然它不是通用(32 位/64 位)构建。您的应用程序运行为 64 位,而 Python 仅为 32 位,或者相反。您可以使用以下方法进行检查file

cd /opt/local/Library/Frameworks/Python.framework/Versions/2.6/
cd lib/python2.6/lib-dynload/
file itertools.so 
itertools.so: Mach-O universal binary with 2 architectures
itertools.so (for architecture x86_64): Mach-O 64-bit bundle x86_64
itertools.so (for architecture i386):   Mach-O bundle i386

最简单的修复可能是重新安装 MacPorts Python 和您安装的其他软件包,例如 PyObjC:

sudo port selfupdate
sudo port -u install python26 +universal ...

编辑:由于您报告 Python 是 64 位的,因此问题几乎可以肯定是由于您的 Python PyObjC 项目的 Xcode 模板设置存在问题。启动代码可能正在加载 Apple 提供的通用 Python 解释器。您可以通过在之前添加类似这样的内容来检查import objc

import sys
sys.stderr.write(sys.executable)

对于 MacPorts,它应该是

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python

我对在 Xcode 下使用模板的来龙去脉不够熟悉,不知道可能需要更改什么,我怀疑很多人将它们与 MacPorts Python 一起使用,尤其是在 10.6 下。

另一个想法是,Apple 提供的 Python 2.6.1 已经安装了 PyObjC 版本。也许使用它会更简单。或者不要使用 Xcode 并使用py2app或其他解决方案来运行它。

于 2010-02-09T05:43:41.047 回答