はじめに
PyinstallerはPythonの実行環境を固めてexe化してくれるツールです。
使い方は簡単ですが、自分が使う上で注意点があったのでメモしておきます。
導入
$ # 導入
$ pip install pyinstaller
$ pyinstaller --version
3.1.1
$ # 使用
$ pyinstaller.exe <python_script_file>
$ pyinstaller.exe <python_script_file> --onefile --clean # 1ファイル化、前回ファイル削除
注意点:__file__
を使わずsys.argv[0]
を使う
exe化する場合、スクリプトパスを取得する__file__
が使えません。元のスクリプトファイル名を取得してしまいます。
exeファイルのパスはsys.argv[0]
で取得しましょう。
注意点:追加モジュールが必要な場合がある
cv2(OpenCV)を使ったアプリをexe化した際、実行時にエラーが出ました。
エラーメッセージに応じて以下のモジュールを追加しました。
conda install six
pip install packaging # conda に無かったのでpipで取得
import six
import packaging
import packaging.version
import packaging.specifiers
import packaging.requirements
補足:過剰にパッケージを取り込んでしまう場合がある
Pyinstaller で Python スクリプトを Windows で実行可能な .exe にする - Qiita
上の記事にあるように、matplotlib.pyplot
を取り込むだけでPyQt
などが取り込まれて大きなサイズになります。
dist配下が140MBほどになりました。--onefile
を指定すると1ファイルにまとまり、60MBほどでした。
自分はconda create
で環境を分けてます(virtualenvのようなもの)が、matplotlib
がPyQt
等に依存しているようなので切り離すのは難しそうです。
補足:UPXでexeファイルが少し圧縮できる
exeファイルを実行可能な形式で圧縮するソフトUPXを使い、ファイルサイズを圧縮できます。こちらからダウンロードして、--upx-dir <UPX_DIR>
など指定しましょう。
前項の例であれば、60MBから49MBになりました。最初に解凍処理が入るので実行は少し遅くなるとの事です。使い分けてみてください。