Python3
PyInstaller

Pythonのexe化、Pyinstaller使用メモ

More than 1 year has passed since last update.


はじめに

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になりました。最初に解凍処理が入るので実行は少し遅くなるとの事です。使い分けてみてください。