wxPython“库未加载”

时间:2012-12-05 21:39:17

标签: 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/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。

1 个答案:

答案 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将不会为您执行此操作。这意味着您有三种选择:

  1. 使用单独的Python安装。
  2. 捣乱py2app无论如何都要构建一个独立的应用,可能是通过篡改py2app来源。
  3. 自己捆绑应用程序(或使用其他工具)。
  4. 最好的答案通常是#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。 (关于一起使用py2appvirtualenv的一些注意事项,您应该在py2app文档中阅读。

    如果您不能或不会做任何这些事情,那么py2app就无法做到你想要的,至少不是开箱即用的。但它是开源的。在源代码中甚至还有一些注释解释了为什么它不会尝试从系统Python创建独立的构建。大多数非常棘手的东西被分成单独的包(例如macholibaltgraph),所以你应该能够理解py2app本身,足以将一个独立的包破解在一起适用于您的特定应用程序。 (这比修改p2app以完全一般的方式修复底层问题容易得多。)

    或者您可以查看与py2app类似的其他工具。尝试搜索py2appfreeze的PyPI,看看会出现什么。您通常可以将软件包安装到您的主目录中,或者在不安装软件包的情况下运行它们,因此开始玩任何看起来很有希望的东西,看看它是否能解决您的问题。