【问题标题】:PyObjC + Xcode 3.2 + Non-Apple PythonPyObjC + Xcode 3.2 + 非苹果 Python
【发布时间】:2010-02-09 05:14:56
【问题描述】:

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

Traceback(最近一次调用最后一次):
  文件“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。

我将不胜感激。

【问题讨论】:

  • 太好了,我并不孤单 PyObjC + Xcode 3.2 + Non-Apple Python :)

标签: python xcode pyobjc itertools


【解决方案1】:

您遇到了 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 或其他解决方案来运行它。

【讨论】:

  • 我检查了 itertools.so 上的架构,它看起来是 64 位的:itertools.so: Mach-O 64-bit bundle x86_64 当我在 Python 可执行文件上尝试这个时,它也是 64 位的:python: Mach-O 64-bit executable x86_64
  • 查看编辑以获取更多建议。
  • 我使用非 Apple Python 的原因是因为 2.6.1 有一个错误导致我的几个脚本出现分段错误,所以我不得不升级,而 Apple 只真正更新他们发布新操作系统版本时的 Python 版本。此外,PIL 使用 Python.org Python 有点烦人,所以我只选择了 MacPorts py26-pil 包,它拥有我需要的一切......直到此时,我发现它有问题使用 PyObjC 和 Xcode。
  • 另外,py26-pil 不想再安装了。 (不知道为什么)日志在这里,如果你有兴趣:pastebin.com/d784f4d13
  • 好吧,既然 Xcode 和 PyObjC 现在可以工作了,(不知道为什么),我会把你的答案标记为答案......但是 PIL 现在不起作用。我想我必须找到另一种方法让所有这些事情同时发挥作用。
猜你喜欢
  • 2010-11-27
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多