search
LoginSignup
90
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Pythonのexe化、Pyinstaller使用メモ

はじめに

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
90
Help us understand the problem. What are the problem?