1

Mac用のwxPythonアプリを作成し、py2appと一緒にパッケージ化しました。2人の人がすでに起動できないと言っており、次のエラーメッセージが表示されます。

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

私はMac10.6.7でしかアプリをテストできませんでした。問題を抱えている両方の人が10.7.xを使用しています。他の誰かがこの問題を抱えていましたか、それが何を意味するのか知っていますか?メッセージから、wxライブラリの読み込みに失敗したようですが、wxライブラリはアプリのResourcesフォルダーにあるはずです。

これが私のセットアップファイルです:

#! /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、で実行します(archPythonを32ビットなしarchで実行させることはできないため、2.6は非常に長い話ですが、py2appで2.7を使用することはできません)。

4

1 に答える 1

2

問題は、セミスタンドアロンアプリを構築していることです。ドキュメントでさまざまな場所で説明されているように、「ベンダーPython」を使用している場合、つまりOS XにプリインストールされているPythonバージョンのいずれかを使用している場合py2app、スタンドアロンアプリを構築することはできません。例えば:

--semi-standaloneオプションまたはベンダーPythonが使用されている場合、Python.frameworkは無視されます。他のすべてのベンダーファイル(/usr/ローカル/を除く/usr/または/System/にあるもの)も除外されます。

したがって、これらはベンダーライブラリであるため、にwxライブラリをパッケージ化することはありません。/usr/lib代わりに、既存のものにリンクするだけです。標準のOSX10.7システムにはそのようなライブラリはありません。あったとしても、10.6から2.8.0バージョンに明示的にリンクすることになったという事実は、それ以降のシステムではおそらく機能しないことを意味します。

あなたがする必要があるのは、それらのwxライブラリを.appバンドルにコピーし、そこからそれらを参照することです。ベンダーのPythonで実行した場合、それpy2appは実行されません。つまり、3つの選択肢があります。

  1. 別のPythonインストールを使用します。
  2. とにかくpy2app、おそらくpy2appソースをハッキングすることによって、スタンドアロンアプリを構築するように仕向けます。
  3. アプリを自分でバンドルします(または別のツールを使用します)。

最良の答えは通常#1です。コメントでは、Python 2.7.3(おそらくpython.orgから)をインストールできpy2app、ベンダー2.6にはインストールできたがpy2app、カスタム2.7にはインストールできなかったと述べています。 3.3。それは非常に信じがたいように聞こえます。(何らかの方法で2.7.3をインストールできた場合は、アクセスできるディレクトリにインストールする必要があります。)ただし、それが真実であっても、問題ではありません。Pythonパッケージは、ホームディレクトリの下のユーザー固有のsite-packagesディレクトリにインストールできます。そのための管理者権限は必要ありません。実際、ほとんどのUnixソフトウェアはそのように機能するように設計されています。

これを行うさらに簡単な方法は、virtualenvを使用することです。はい、インストールできませんが、インストールする必要はありません。ドキュメントを読むと、何もインストールできないシステムでvirtualenvをブートストラップする方法に関する一連の手順もあります。その結果、システム2.7.3に基づいた独自のPythonインストールが作成されますが、完全に制御できます。だからあなたはpy2appそこにインストールすることができます。py2app(一緒に使用することについてのいくつかのメモがあります。これについてはドキュメントvirtualenvで読む必要があります。)py2app

あなたがそれらのことのどれもできないか、またはしないならpy2app、少なくとも箱から出して、あなたが望むことをすることができません。しかし、それはオープンソースです。また、ソースには、システムPythonからスタンドアロンビルドを作成しようとしない理由を説明するコメントもあります。そして、本当にトリッキーなもののほとんどは別々のパッケージ(macholibとなど)に分けられているので、特定のアプリで機能するスタンドアロンパッケージを一緒にハックするのに十分なほど、それ自体altgraphを理解できるはずです。(これは、根本的な問題を完全に一般的な方法で修正するために変更するpy2appよりもはるかに簡単です。)p2app

または、py2appと同様のことを行う他のツールを調べることもできます。PyPIでpy2appを検索するか、フリーズして何が表示されるかを確認してください。通常、パッケージはホームディレクトリにインストールすることも、インストールせずに実行することもできます。そのため、有望と思われるものを試して、問題が解決するかどうかを確認してください。

于 2012-12-05T21:47:33.157 に答える