我为Mac制作了一个wxPython应用程序并用py2app打包。有两个人已经说他们无法启动它,并出现以下错误消息:
ImportError: dlopen(/Users/username/Desktop/MCManager.app/Contents/Resources/lib/python2.6/wx/_core_.so, 2): Library not loaded: /usr/lib/libwx_macud-2.8.0.dylib
Referenced from: /Users/username/Desktop/MCManager.app/Contents/Resources/lib/python2.6/wx/_core_.so
Reason: image not found
我只能在Mac 10.6.7上测试应用程序。遇到问题的两个人都在使用10.7.x.有没有其他人有这个问题,或知道这意味着什么?从消息中可以看出,它尝试加载wx库失败,但是wx库应该在应用程序中 s资源文件夹,对吗?
这是我的设置文件:
#! /usr/bin/env python
import py2app
from setuptools import setup
setup(
options = dict(
py2app = dict(
iconfile = 'MCManager.icns',
packages = 'wx',
site_packages = True,
plist = dict(
CFBundleName = "MCManager",
CFBundleShortVersionString = "1.2.2",
CFBundleGetInfoString = "MCManager 1.2.2",
CFBundleExecutable = "MCManager",
CFBundleIdentifier = "net.sourceforge.mcmanager",
),
),
),
app = ['ScriptUnix.py']
)
我用arch -i386 python26 filename.py py2app
运行它,(arch
因为我不能让Python在没有arch
的情况下运行32位,而2.6因为非常长的故事,我可以不要用py2app使用2.7。
答案 0 :(得分:2)
问题是你正在构建一个半独立的应用程序。正如the docs在各个地方解释的那样,如果您使用的是“供应商Python”,意味着预先安装了OS X的任何Python版本,py2app
无法构建独立应用程序。例如:
如果使用--semi-standalone选项或供应商Python,则忽略Python.framework。所有其他供应商文件(/ usr /或/ System /不包括/ usr / local /中的文件)也被排除在外。
因此,它没有打包wx
中的/usr/lib
库,因为它们是供应商库。相反,它只是链接到现有的。标准OS X 10.7系统上没有这样的库。即使有,你最终明确地链接到10.6的2.8.0版本意味着它可能不适用于以后的系统。
您需要做的是将这些wx
库复制到您的.app
包中,并从那里引用它们。如果您使用供应商Python运行它,py2app
将不会为您执行此操作。这意味着您有三种选择:
py2app
无论如何都要构建一个独立的应用,可能是通过篡改py2app
来源。最好的答案通常是#1。在您的评论中,您说您可以安装Python 2.7.3(可能来自python.org?),您可以为供应商2.6安装py2app
,但是您无法安装py2app
用于自定义2.7.3。这听起来非常难以置信。 (如果你能够以某种方式安装2.7.3,它应该被安装到你有权访问的目录中。)但是,即使它是真的,也没关系;您可以将Python包安装到主目录下的特定于用户的site-packages目录中。您不需要管理员权限。事实上,大多数Unix软件都是以这种方式工作的。
更简单的方法是使用virtualenv。是的,我知道,你不能安装它,但你没有必要。如果您阅读了文档,那么甚至还有一整套关于如何在无法安装任何内容的系统上引导virtualenv的说明。结果是您自己的个人Python安装,基于系统2.7.3,但您可以完全控制。所以你可以在那里安装py2app
。 (关于一起使用py2app
和virtualenv
的一些注意事项,您应该在py2app
文档中阅读。
如果您不能或不会做任何这些事情,那么py2app
就无法做到你想要的,至少不是开箱即用的。但它是开源的。在源代码中甚至还有一些注释解释了为什么它不会尝试从系统Python创建独立的构建。大多数非常棘手的东西被分成单独的包(例如macholib
和altgraph
),所以你应该能够理解py2app
本身,足以将一个独立的包破解在一起适用于您的特定应用程序。 (这比修改p2app
以完全一般的方式修复底层问题容易得多。)
或者您可以查看与py2app类似的其他工具。尝试搜索py2app或freeze的PyPI,看看会出现什么。您通常可以将软件包安装到您的主目录中,或者在不安装软件包的情况下运行它们,因此开始玩任何看起来很有希望的东西,看看它是否能解决您的问题。