Pythonのexe化、Pyinstaller使用メモ

  • 35
    いいね
  • 0
    コメント

はじめに

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のようなもの)が、matplotlibPyQt等に依存しているようなので切り離すのは難しそうです。

補足:UPXでexeファイルが少し圧縮できる

exeファイルを実行可能な形式で圧縮するソフトUPXを使い、ファイルサイズを圧縮できます。こちらからダウンロードして、--upx-dir <UPX_DIR>など指定しましょう。
前項の例であれば、60MBから49MBになりました。最初に解凍処理が入るので実行は少し遅くなるとの事です。使い分けてみてください。