wxPython“;“库未加载”;
我为Mac制作了一个wxPython应用程序,并用py2app打包。有两个人已经表示他们无法启动它,并显示以下错误消息:wxPython“;“库未加载”;,python,wxpython,wxwidgets,Python,Wxpython,Wxwidgets,我为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/u
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是因为,长话短说,我无法将2.7与py2app一起使用)。问题是您正在构建一个半独立的应用程序。正如在不同地方所解释的,如果您使用的是“供应商Python”,即预装OS X的任何Python版本,py2app
无法构建独立的应用程序。例如:
如果使用--semi-standalone选项或供应商Python,则会忽略Python.framework。所有其他供应商文件(位于/usr/或/System/excluding/usr/local/中的文件)也被排除在外
因此,它不会将wx
库打包到/usr/lib
中,因为它们是供应商库。相反,它只是链接到现有的。标准OS X 10.7系统上没有这样的库。即使有,您最终明确链接到10.6版本的2.8.0版本这一事实也意味着它可能无法在以后的系统上工作
您需要做的是将这些wx
库复制到您的.app
包中,并从那里引用它们。如果您使用您的供应商Python运行它,py2app
将不会为您做到这一点。这意味着您有三个选择:
使用单独的Python安装
不管怎么说,欺骗py2app
构建一个独立的应用程序,可能是通过破解py2app
源代码
自己捆绑应用程序(或使用其他工具)
最好的答案通常是1。在您的评论中,您说您能够安装Python2.7.3(可能来自Python.org?),并且您能够为供应商2.6安装py2app
,但是您无法为定制的2.7.3安装py2app
。这听起来非常难以置信。(如果您能够以某种方式安装2.7.3,则应将其安装到您有权访问的目录中。)但是,即使这是真的,也无所谓;您可以将Python软件包安装到主目录下特定于用户的站点软件包目录中。你不需要管理员权限。事实上,大多数Unix软件都是这样设计的
更简单的方法是使用。是的,我知道,你不能安装它,但你不必安装。如果您阅读了文档,甚至有一整套关于如何在无法安装任何东西的系统上引导virtualenv的说明。结果是基于system 2.7.3,您自己安装了Python,但您可以完全控制它。因此,您可以在那里安装py2app
。(关于同时使用py2app
和virtualenv
有一些注意事项,您应该在py2app
文档中阅读。)
如果您不能或不愿做这些事情,那么py2app
就不能做您想做的事情,至少不能开箱即用。但它是开源的。源代码中甚至有注释解释了为什么它不尝试从系统Python生成独立版本。而且大多数真正棘手的东西都被分为不同的包(比如macholib
和altgraph
),所以你应该能够理解py2app
本身,足以拼凑出一个适用于特定应用的独立包。(这比修改p2app
以完全通用的方式解决根本问题要容易得多。)
或者你可以看看其他做类似事情的工具,比如py2app。尝试在PyPI中搜索or,看看会出现什么。您通常可以将软件包安装到主目录中,也可以在不安装软件包的情况下运行它们,因此,请开始使用任何看起来有希望的软件包,看看它是否能解决您的问题。我将使用我的安装文件、参数和其他信息编辑我的答案。我有一个新安装的WXPython(但我不知道实际的WX C++库),OSX上的许多其他用户运行它没有问题。这仍然是不够的信息;你必须回答所有的问题,而不仅仅是其中的一些。但我可以猜测:您可能发布了一个半独立的构建,它将与任何拥有Python、wx和其他任何完全兼容版本的人一起工作,而不适用于任何其他人。这可能意味着每个人都使用10.6.x或更高版本,但不是10.5、10.7+或更早的10.6版本。我基本上回答了所有问题。我怎样才能使它完全独立?不,你没有回答所有问题。它是否是python26(在/usr/bin
和/或/System/Library/…
中)的股票?简短的版本是,py2app
无法在系统Python安装之外自动创建完全独立的版本。因此,您要么必须了解py2app
如何工作的详细信息,要么安装不同的Python,最好是股票Python.org发行版,并使用它来py2app
。是的,每个虚拟环境都有自己的pip
。这些都在文档的用法部分进行了描述,但简要的版本是:Docd/path/to/virtualenv;source./bin/activate
。现在您的virtualenv已为当前终端窗口激活,因此您只需在该窗口中执行pip安装py2app
,它使用virtualenv的pip
,因此它将安装到virtualenv而不是系统范围内,因此您不需要是root用户。您也可以显式地执行/path/to/virt