Help us understand the problem. What is going on with this article?

Pythonのexe化、Pyinstaller使用メモ

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

ymdymd
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした