PyObjC+Xcode 3.2+非应用Python

2024-04-26 00:33:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Traceback (most recent call last):
  File "main.py", line 10, in 
    import objc
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyObjC/objc/__init__.py", line 25, in 
    from _convenience import *
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyObjC/objc/_convenience.py", line 21, in 
    from itertools import imap
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/itertools.so, 2): no suitable image found.  Did find:
    /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/itertools.so: mach-o, but wrong architecture
2010-02-08 19:40:09.280 TestApplication[3229:a0f] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '/Users/icktoofay/Desktop/TestApplication/main.m:44 main() PyRun_SimpleFile failed with file '/Users/icktoofay/Desktop/TestApplication/build/Debug/TestApplication.app/Contents/Resources/main.py'.  See console for errors.'

当我尝试打开一个普通的Python提示符并导入itertools时,没有出现任何错误。我在macosx10.6snowleopard上使用MacPorts的python2.6.4。在

我很感激你的帮助。在


Tags: inpymainliblocallinelibrarypyobjc
1条回答
网友
1楼 · 发布于 2024-04-26 00:33:50

你有一个32位对64位的问题。看起来您使用的是从MacPorts安装的Python2.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):

^{pr2}$

编辑:既然您报告Python是64位的,那么问题几乎可以肯定是由于pythonpyobjc项目的Xcode模板设置问题引起的。启动代码可能正在加载苹果提供的通用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版本下。在

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

相关问题 更多 >

    热门问题