代码之家  ›  专栏  ›  技术社区  ›  icktoofay pcp

pyobjc+xcode 3.2+非苹果python

  •  2
  • icktoofay pcp  · 技术社区  · 14 年前

    我想开始尝试用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 ,没有错误。我使用的是MacPorts的python 2.6.4,在MacOSx10.6雪豹上。

    我很感谢你的帮助。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Ned Deily    14 年前

    您有一个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位的,那么问题几乎肯定是由于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以下。

    另一种想法是,苹果支持的python 2.6.1附带了一个已经安装的pyobjc版本。也许使用它会更简单。或者不使用xcode和use py2app 或者运行它的另一个解决方案。