3

py2app を使用して Mac でアプリをビルドしようとしています。私のマシンではすべて正常に動作していますが、アプリを別のマシンに移動するとクラッシュし、コンソールにこのエラーが表示されます。

ERROR: pygame.macosx import FAILED

誰もこれに対する解決策を持っていますか?

4

2 に答える 2

12

何時間もかけて問題と解決策を見つけました。他の人も同様の問題を経験しており、彼らの記事は非常に役に立ちました。

http://b.atcg.us/blog/2010/04/13/py2app-hell-the-first.html

http://www.vijayp.ca/blog/?p=62

他の誰かがこの問題に遭遇した場合、この特定の問題は、Python フレームワークがアプリケーションにバンドルされていなかったことが原因で発生しました。これを確認するには、アプリを右クリックしてパッケージの内容を表示し、Contents/Frameworks/ に進みます。Python.framework がない場合は、あるはずです。

必ず Python をダウンロードしてください。私の最初の問題は、Apple のビルドイン Python パッケージへの依存でした。これを使用しないでください。独自のバージョンの python をインストールする必要があります。http://www.python.org/download/releases/にアクセスし、バージョンを見つけて (私は 2.6 のままでした)、gzip (mac パッケージではありません) をダウンロードし、Snow Leopard を実行している場合は次のようにインストールします。

./configure --enable-framework MACOSX_DEPLOYMENT_TARGET=10.6 --with-universal-archs=intel --enable-universalsdk=/
make
sudo make install

パスの調整、パッケージのインストール- ここから、パスを調整して、カスタム インストール バージョンを使用していることを確認する必要があります。ここから、次のパッケージを再インストールしました。これは依存関係の悪夢であることが判明したため、バージョン番号も含めています。

  • py2app 0.5.2
  • マチョリブ1.3
  • モジュールグラフ.8.0

これらのパッケージが実際に機能する場合は、アプリをビルドして実行できるはずです。残念ながら、そうではありません。エラーとハッキングされた解決策については後で詳しく説明しますが、ビルド ファイルには最初に行う必要がある設定がいくつかあります。

まず、setup.py ファイルは次のようになります。

setup.py

from setuptools import setup

APP = ['Game.py']
DATA_FILES = ['data']

OPTIONS = {
    "argv_emulation": False,
    "compressed" : True,
    "optimize":2, 
    "iconfile":'data/game.icns',        
}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
)

次に、安全を確保するために、シェルスクリプトを使用してこれを呼び出します。

build.sh

## Remove previous builds.  Start with clean slate.
rm -rf build dist

## Force python into 32 bit mode.
export VERSIONER_PYTHON_PREFER_32_BIT=yes

## Force build with custom installed python
/Library/Frameworks/Python.framework/Versions/2.6/bin/python setup.py py2app

build.sh を実行すると、アプリがコンパイルされます。コンパイルできない場合は、朗報です。それはあなたのせいではありません。ライブラリの不具合により、次の一部 (またはすべて) に遭遇する可能性があります。

潜在的な問題 ビルド スクリプトが失敗した場合は、次のキーワードのいくつかについてトレースバックをスキャンします。

pygame が見つかりません- py2app の基本的なパスの問題です。追加...

sys.path.insert(0, os.path.join(os.getcwd(), 'lib', 'python2.6','lib-dynload')) ## Added to fix dynlib bug

py2app lib の boot_app.pyの import ステートメントの後。

pythonNone - これは、python ビルドのバージョン番号を判別できない macho パッケージのバグのようです。これを解決するために、 py2app のbuild_app.pyに次の行を追加しました。

## Add these two lines...
if not info["version"]:
  info["version"] = "2.6"
## Before this line. (line 941 in method copy_python_framework() at time of writing)
pydir = 'python%s'%(info['version'])

そのようなファイルやディレクトリはありません... Python.framework/[lib|include] - py2app は、ファイル システム ツリーのより深いところに存在するディレクトリを探しているだけです。Python.framework ディレクトリに移動し、その場所をシンボリック リンクします...

cd /Library/Frameworks/Python.framework
sudo ln -s Versions/Current/include/ include
sudo ln -s Versions/Current/lib lib

それはそれを行う必要があります!- これらの手順により、他の Intel マシンで動作するコンパイル済みアプリが作成されました。

于 2011-03-06T00:01:59.683 に答える
1

見つけたものを投稿していただきありがとうございます!

私も同様の問題を抱えていました。私はあなたが提案したもののさまざまな組み合わせを試し、あなたが上で特定したboot_app.pyのバグであるという単一の問題を切り分けました。

上記で特定したboot_app.pyに1行の修正を追加すると、プリインストールされているAppleビルドのPython(バージョン2.6.1)を使用しても、すべてが機能しました。

「すべてが機能した」と言うときは、実際に配布するためにpy2appアプリを作成することを意味します。つまり、通常のコマンドを使用します。

python setup.py py2app

「エイリアス」モード。すなわち

python setup.py py2app -A

py2appのドキュメントで開発中に使用することが提案されていますが、それでも機能しません(同じモジュールが見つからないというエラーがあります)。しかし、実際の配布ビルドは、まったく機能しないよりもうまく機能します。繰り返しになりますが、ありがとうございます。

于 2011-07-16T23:41:49.520 に答える