Anaconda 上で開発した Python のプログラムを実行ファイル(.exe)にして配布するために
pyinstaller を使ったら、つまずいてしまったので、その時の解決手順をまとめました。
環境
・Windows 10
・Anaconda 1.9.12
手順
Anaconda Prompt の起動と仮想環境のアクティブ化
まず、次のコマンドを入力して、すべての仮想環境の確認します。
conda info -e
「*」マークがついている環境が、現在アクティブになっていることが確認できます。
次のコマンド(「test」のところは、アクティブにしたい環境名に書き換え)を入力して、
目的の環境をアクティブにします。
activate test
pyinstaller のインストール
conda install pyinstaller
ここで「pip」ではなく「conda」を使うことをおすすめします。
実行ファイル化
実行ファイル化したい pyファイルが保存されているディレクトリに移動したあと、
以下のコマンドを実行すると、exeファイルが出力されます。
pyinstaller test.py --onefile --noconsole
オプションはそれぞれ次の意味があります
--onefile:1つのexeファイルにまとめる
--noconsole:アプリを実行した際にコマンドプロンプトを起動しない
問題なく exeファイルが出力されたら、実行してみます。
・・・あれ?開かない?
そう、なぜか開くまでに1分ほど時間がかかります。
pyinstaller の仕様なのか、オプションを追記する必要があるのかは分かりません。
※ご存知の方いましたら、ぜひ教えてください
なお、exeファイルを実行したら、
Failed to execute script pyi_rth_pkgres(スクリプト pyi_rth_pkgres の実行に失敗しました)
と書かれたメッセージボックスが表示されて、実行できない場合があります。
私はこの問題でつまずきました。
原因
http://www.pyinstaller.org/ で配布されていたリソースが古かった
解決方法
1.pip install pyinstaller でDLした Pyinstaller をアンインストール
conda uninstall pyinstaller
2.GitHub の開発リポジトリから Pyinstaller をインストール
conda install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
3.compat.py を修正
ソース内の次の表記を、
out = out.decode(encoding)
次のように修正します。
out = out.decode(encoding, errors='ignore')
この表記はソース内に2箇所あるので、その両方を修正します。
もしこの修正をせずに exe ファイル化をすると、
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 136: invalid start byte
という文字コードエラーが出てしまいます。
以上です。最後までお読みいただきありがとうございます。
この記事が、あなたのお役に立てたら嬉しいです。
謝辞
執筆にあたり、こちらを参考にさせていただきました。ありがとうございます。
・Error running the exe file in Windows "Failed to execute script pyi_rth_pkgres" #2137
・【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる