py2app を使用して Mac でアプリをビルドしようとしています。私のマシンではすべて正常に動作していますが、アプリを別のマシンに移動するとクラッシュし、コンソールにこのエラーが表示されます。
ERROR: pygame.macosx import FAILED
誰もこれに対する解決策を持っていますか?
何時間もかけて問題と解決策を見つけました。他の人も同様の問題を経験しており、彼らの記事は非常に役に立ちました。
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
パスの調整、パッケージのインストール- ここから、パスを調整して、カスタム インストール バージョンを使用していることを確認する必要があります。ここから、次のパッケージを再インストールしました。これは依存関係の悪夢であることが判明したため、バージョン番号も含めています。
これらのパッケージが実際に機能する場合は、アプリをビルドして実行できるはずです。残念ながら、そうではありません。エラーとハッキングされた解決策については後で詳しく説明しますが、ビルド ファイルには最初に行う必要がある設定がいくつかあります。
まず、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 マシンで動作するコンパイル済みアプリが作成されました。
見つけたものを投稿していただきありがとうございます!
私も同様の問題を抱えていました。私はあなたが提案したもののさまざまな組み合わせを試し、あなたが上で特定したboot_app.pyのバグであるという単一の問題を切り分けました。
上記で特定したboot_app.pyに1行の修正を追加すると、プリインストールされているAppleビルドのPython(バージョン2.6.1)を使用しても、すべてが機能しました。
「すべてが機能した」と言うときは、実際に配布するためにpy2appアプリを作成することを意味します。つまり、通常のコマンドを使用します。
python setup.py py2app
「エイリアス」モード。すなわち
python setup.py py2app -A
py2appのドキュメントで開発中に使用することが提案されていますが、それでも機能しません(同じモジュールが見つからないというエラーがあります)。しかし、実際の配布ビルドは、まったく機能しないよりもうまく機能します。繰り返しになりますが、ありがとうございます。