PyinstallerでMacの実行形式を作成した時、エラーで起動できない時の対処

Pythonで、MacやWindowsの実行形式を作成するには、Pyinstallerを利用しています。

作成したアプリをダブルクリックした時、Windowsでは問題なく起動するのに、Macでは、ちっとも起動しないという現象に悩まされていましたが、ようやく原因が分かったので、記載しておきたいと思います。

原因の特定方法

起動しない原因は様々なので、まずは、原因を特定する必要があります。

私の場合、

ダブルクリックで起動しようとすると、一瞬起動して画面下部にアイコンが表示されるけど、すぐに消えてしまう。

ダブルクリックではなく、実体の方をコンソールから起動するとちゃんと起動する。

という現象となっていました。

「実体の方をコンソールから起動すると」というのは、GUIアプリだと、

pyinstaller ./main.py –noconsole

のように、–noconsoleオプションでビルドしますが、すると、main.appとmainというディレクトリが生成されます。

main.appの中身は、Contentsが格納されれいますが、その中のunix実行形式(main)をコンソールで以下のように直接起動すると、起動可能でした。

main.app/Contents/MacOS/main

ただし、その場合、コンソールにデバッグ文などの標準出力が表示されてしまいます。

このような状態であれば、おそらく、私と同じ理由で起動できないと思われます。

起動できない原因と解決方法

この場合、起動できない原因は、ファイル権限がないため(file permission)、かつ、ファイルパスを相対パスで指定しているためでした。

プログラムの中で、ログ出力等で、ファイル出力をしていたのですが、そのファイルハンドルの指定が、相対パスになっていると、権限がないため、メッセージなしで落ちていた感じです。

これを、相対パスではなく、絶対パスを作成して指定することで、起動時に、「書き込みを行っていいですか?」という旨のメッセージが表示されて、起動できるようになりました。

相対パスだと、このメッセージすら表示されずに、そのまま落ちているので、原因不明で起動できないように見えていました。