Pyinstallerで生成されるExeファイルの容量を削減する方法を紹介します。
Pyinstallerは、WindowsでPythonのインストールなどせずに実行するために使うPythonツール?になりますが、Pyinstallerって何?どうやって使うの? どうやってインストールするの?っていう方は↓を確認してください。
まず、PyinstallerでExe化するとなぜか大したことをしないプログラムでも超巨大なexeファイルが出来上がってしまって、うーんと悩む方がいるかと思います。
なので、簡単にですがなぜ巨大なファイルになってしまうのか記載しておきます。
なにかの参考にしてみてください。
ではなぜ、大きなファイルになってしまうのかですが、これはPythonで実行することが大きな問題となります。Pyinstallerは、Windowsで実行できる形式にしているのではないということです。
というのも、Pyinstallerがやっていることは、Windows上で実行できるように、exeという形式にPythonの実行プログラムやライブラリを圧縮することなんです。
なので、PyinstallerでExe化したファイルは、実行するとWindows上のテンポラリフォルダに一度圧縮したものを展開し、実行するようになっています。
それもあり、Pyinstallerでexe化したものは、起動が若干遅くなります。
※これは、都合上どうしようもないことですね。
以下のフォルダに実行環境が丸ごとコピーされて、実行されます。
C:\Users\XXX\AppData\Local\Temp_YYYY
※XXXはユーザー名 YYYには任意の文言
↓のようにテンポラリ環境が構築されて、実行されます。
また、何も指定せずに–onefileオプションを実行すると、インストールされている環境をすべて実行されるために、大きなファイルサイズになってしまいます。
上述の通り、何も指定せずに実行ファイル作成すると、すべてのライブラリが圧縮されてしまうので、非常に大きなサイズになってしまっています。
なので、インポート(使用される)するライブラリに絞ってexeに入れるように指定することで、ファイルサイズを小さくします。
また、これにより、起動時間も微々たるもんですが、短くすることができます。
じゃあ実際にファイルを小さくする方法です。
まずは、何も考えずに 以下の通り オプションを–onefileのみで実行します。
Pyinstaller ollama.py --onefile
※ollama.pyには実際にExe化したいプログラムを指定します。
これにより、specファイルというファイルが作成されます。
中身は、以下のようなファイルになります。
これはpyinstallerの設定内容になります。
この中の、excludeに、不要なライブラリを記述することで不要なものを対象としないようにします。
↓のような感じです。
記載方法は、ライブラリ名をシングルコーテーション(’)で囲って、連続して書く場合はカンマ(,)で区切って記載します。以下のような感じです。
excludes=['numpy','matplot','yt-dlp','emoji','ffmpeg','marshmallow','networkx','PyAudio'],
削除できる対象となるものは、pyinstallerを実行した際に、”Adding imports”という形で記載されています。
※ただし、これが全部というわけではなさそうなので、”pip list”などでインストールしているものを確認して設定してください。
ここまでできれば、後は、Pyinstallerを再実行します。
ただし、specファイルの内容で実行してほしいので、ファイルを指定して実行します。
実際のコマンドは以下です。
pyinstaller ollama.spec
※ollama.specは実際のspecファイルを指定してください。
ここからは実際に作成されたファイルの比較です。
設定 | ファイルサイズ |
---|---|
設定なし | 75MB |
設定あり | 59MB |
設定なしの場合
設定した場合
見ての通り、75MByteが、59Mbyteとなっていて、ずいぶん小さくなっています。
今回は、適当に除外項目を設定していますので、きちんと確認して徹底的に除外すれば、もう少し小さくできるかと思います。
ただ、それでも実行ファイルとしてはかなり大きくなりますが、これはPyinstallerを使う限り仕方ないので、割り切ってください。。。
Pyinstallerは、Pythonで作成したアプリを、他の人に展開したい場合に使える非常に優秀なソフトです。ただし、容量が大きくなる問題がありちょっと敬遠される方もいるかと思いますが、ちょっと工夫すればそれなりに小さくできることがわかりました。
皆さんも、上記を活用して業務効率化の助けとしてください。
最後に、Pythonの基礎を学びたい方は以下がおすすめです。私も持っていてたまに眺めて勉強していますものですのでぜひ購入して学習してみてください。