Python py2app、pyObjc和macports编译错误

Python py2app、pyObjc和macports编译错误,python,macports,pyobjc,py2app,Python,Macports,Pyobjc,Py2app,我目前正在编写一个小型python应用程序,使用py2app嵌入cherrypy和django。 在我尝试将pyobjc包含在我的项目中之前,它一直运行良好,因为我的应用程序需要一个小型GUI,它由顶部菜单栏中的一个小图标+一个下拉菜单组成 我可以毫无问题地运行我的python脚本,因为我使用的是带有macports的Python2.6,但是我无法启动py2app生成的应用程序包。 此时会出现一个对话框,其中显示以下消息: ImportError: dlopen(/Users/denis/tlo

我目前正在编写一个小型python应用程序,使用py2app嵌入cherrypy和django。 在我尝试将pyobjc包含在我的项目中之前,它一直运行良好,因为我的应用程序需要一个小型GUI,它由顶部菜单栏中的一个小图标+一个下拉菜单组成

我可以毫无问题地运行我的python脚本,因为我使用的是带有macports的Python2.6,但是我无法启动py2app生成的应用程序包。 此时会出现一个对话框,其中显示以下消息:

ImportError:
dlopen(/Users/denis/tlon/standalone/mac/dist/django_cherry.app/Contents/Resources/lib/python2.6/lib-dynload/CoreFoundation/_inlines.so, 2): no suitable image found.
Did find:
    /Users/denis/tlon/standalone/mac/dist/django_cherry.app/Contents/Resources/lib/python2.6/lib-dynload/CoreFoundation/_inlines.so: mach-o, but wrong architecture
我做了一个简短的回答:

sudo port -u install py26-pyobjc +universal
但出于某种原因,macports尝试构建openssl,每次编译都会失败。 问题似乎与zLib有关-这是日志中显示的内容:

:info:build ld: warning: in /opt/local/lib/libz.dylib, file is not of required architecture
…下面是文件/opt/local/lib/libz.dylib的输出:

我觉得没什么不对劲的

我有点困在这里了。 我甚至不明白openssl与pyObjc有什么关系,但如果我不设法编译它,我似乎哪儿也去不了。Macports有时真的很糟糕:/


EDIT I设法修复Macports问题,但不是py2app one://

我猜这是因为所需的库不在库路径中,所以加载程序无法确定它在哪里,因此它可以链接中的符号。你应该做两件事中的一件:

启动应用程序时,将/opt/local/lib添加到$LD_LIBRARY_PATH环境变量中;或 将适当的库与.app文件捆绑在一起。
谢谢事实上,我终于设法编译并运行了所有程序。为了解决第一个“错误的体系结构”问题,我找到了一个解决方法,将macports pyobjc库替换为apple库,它与操作系统一起预装,并在/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/Python/PyObjC/中针对不同的体系结构进行编译。我有一个bash脚本,它可以在.app使用py2app构建之后将所有内容复制到正确的位置-这样可以很好地工作。不要编辑你的LD_库路径!!如果你必须做这样的事情。。。坚持使用$DYLD\u备用\u库\u路径。此外,鲜为人知的sudo update\u dyld\u shared\u缓存有时也是一块宝石。

    /opt/local/lib/libz.dylib: Mach-O universal binary with 2 architectures
    /opt/local/lib/libz.dylib (for architecture x86_64):    Mach-O 64-bit dynamically linked shared library x86_64
    /opt/local/lib/libz.dylib (for architecture i386):  Mach-O dynamically linked shared library i386