2016-09-07 34 views
2

私はAnacondaディストリビューションのPython 3を使用しており、単純なPythonプログラムをOS Xアプリケーション(El Capitanで実行中)に変換しようとしています。 the tutorialの指示に従って、私はAnaconda Pythonでpy2appを使用するにはどうすればよいですか?

py2applet --make-setup my-script.py 
python setup.py py2app -A 

すべてがエラーなしで正常に走った走ったが、私はアプリを起動しようとすると、私はこのエラーメッセージが表示されます:

my-script: A python runtime not could (sic) be located. You may need to install a framework build of Python, or edit the PyRuntimeLocations array in this applications Info.plist file.

は私が私を意味するために、これを理解しましたAnacondaのPythonのパスを追加する必要があります(これは私のbash PATHにありますが、ランチャーには知られていません)。しかし、自動的に生成されたアプリの Info.plistはすでにアナコンダのpythonバイナリを指す:

<key>PythonInfoDict</key> 
<dict> 
    <key>PythonExecutable</key> 
    <string>/Applications/Experimental/anaconda/bin/python</string> 
    ... 

私はここに修正するためにそこにあるものが表示されません。私は、これらの関連の質問を読んでいる:

最初の質問は、同じエラーメッセージが関与し、2番目の質問にアドバイスに従うことによって解決されます。しかし、私が理解しているように、これらの質問は逆の状況を記述しています:OPはOSと一緒に配布されたPythonを実行していて、アプリを配布したいと思っていました。ソリューションは別にインストールされたPythonを使用することです。私はです非システムPythonを使用して、私はまだ何かを配布しようとしていません。それでは、ここで問題を引き起こしているのは何ですか?その解決策は何ですか?

+0

エイリアスオプション(例: 'python setup.py py2app')や' open -a dist/MyApplication.app'を使わずにアプリを実行しようとしましたか? –

+1

便利な提案! 'open -a dist/my-script.app'は失敗しますが( 'dist/my-open.app'という名前のアプリケーションを見つけることができませんでした)、完全なアプリケーションビルドを試みています(まだ動作しませんが) : 'libpython' dllはpy2appが期待しているので名前は付けられません。私は生成された 'Info.plist'を編集して修正することができました。 – alexis

答えて

1

@ l'L'lの提案は私が問題を特定するのを可能にしました:私が "エイリアスモード"(バイナリをコピーするのではなく環境へのシンボリックリンクを使用して)でアプリケーションを生成したときにエラーはありませんでしたが、エイリアスモードを使用せずにエラー:py2app/Applications/anaconda/lib/libpython3.4.dylibの下にlibpython DLLを探します。

Anacondaは少し遅れてこのDLLを提供しています(libpython3.4m.dylib)。パッチを適用すると問題が解決されますが、の右解決策は、setup.pyを編集して将来のビルドが正しく機能するようにすることです。 py2app documentationの助けを借りて、私は(setup.pyの部分的な内容が示さ)一緒に以下を置く:

OPTIONS = {'argv_emulation': True, 
      'plist': { 
       'PyRuntimeLocations': [ 
       '@executable_path/../Frameworks/libpython3.4m.dylib', 
       '/Applications/anaconda/lib/libpython3.4m.dylib' 
       ] 
      }} 

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

パスが生成さInfo.plistから来ます。相対パスでローカルDLLを提供すると、デフォルトの名前を持つことになると推論して、絶対パスのみを変更しました。

+0

どのようにこれらのDLLの両方を見つけましたか?私は同じ問題を抱えていて、PyRuntimeLocations:/Users/***/anaconda/lib/libpython3.5m.dylibで見つけることができる1つのDLLを含めてみました。しかし、それは違いをもたらすようには見えません。実際、私は/Users/***/anaconda/lib/nonsense.dylibを含めてみましたが、何も変わっていませんでした。エラーはスローされませんでした。 –

+0

ファイル 'py2app'をインクルードしようとしていたディレクトリに' cd'しただけで、そこに何があるかチェックしました。しかし、あなたは 'mdfind -name libpython'を試すこともできます(OS Xを使っているのであれば' 'locate''または' 'slocate''です)。しかし、私の答えで私が記述したエラーを実際に見たことがないと言っていますか?エイリアス以外のモードでビルドを試しましたか?エラーメッセージが表示されない場合は、おそらく別の問題があります。 – alexis

+0

明確にするには:私はあなたが持っているのと同じエラーを取得し、非エイリアスモードで構築しています。 py2appはコンパイル時にこのエラーメッセージを表示します: 'ValueError: '/Users/***/anaconda/lib/libpython3.5.dylib' does not exist' しかし、py2appは私が 'plist '、つまり '{' PyRuntimeLocations ':['/Users/****/anaconda/lib/nonsense.dylib ']}'となります。そして、それを開こうとすると "PyRuntimeLocationsを編集"エラーが表示されます。実際にはPyRuntimeLocationsを使用しているようには見えません。 PyRuntimeLocationsが実際にどのように動作するのか、私は不思議に思っていました。 –

関連する問題