py2app、pyObjc和macports编译错误

1 投票
1 回答
974 浏览
提问于 2025-04-16 00:02

我现在正在写一个小的Python应用程序,里面用到了cherrypy和django,并且使用py2app来打包。这个程序运行得很好,直到我尝试在项目中加入pyobjc,因为我的应用需要一个小的图形界面(就是在顶部菜单栏上有一个小图标和一个下拉菜单)。

我可以毫无问题地运行我的Python脚本(我用的是Python 2.6和macports),但是我无法启动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

...这是我运行file /opt/local/lib/libz.dylib的输出:


    /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

我觉得没有什么问题。

我有点卡住了。我甚至不明白openssl和pyObjc有什么关系,但如果我不能编译它,看起来我就没办法继续下去了。macports有时候真的很糟糕 :/

编辑 我解决了macports的问题,但py2app的问题还是没解决 :/

1 个回答

0

我猜是因为一个必需的库没有在你的库路径里,所以加载器找不到它,无法链接相关的符号。你可以做两件事:

  1. 在启动应用程序时,把 /opt/local/lib 加入到你的 $LD_LIBRARY_PATH 环境变量中;或者
  2. 把合适的库和 .app 文件打包在一起。

撰写回答