ぽっけの技術ブログ

仕事や趣味で日々学んだことを出力していきます。

Pyinstallerでビルドすると重くなるとき

Pyinstallerでpyファイルをexeファイルにビルドすると、ファイルサイズがとても大きくなることがあります。
自分は2KBのpyファイルをビルドすると19943KBのexeファイルになってしまいました。

pyinstaller xxx.py --onefile

pyinstallerで--onefileオプション付きでビルドすると、環境上のライブラリを全て取り込みexeファイルを作成してしまうのが原因です。
対策として不要なライブラリがある場合、--excludeオプションでビルドから除外するライブラリを指定することも出来ます。

ただ、自分は今回乱数生成用のライブラリが必要だったので、 numpy を標準ライブラリの random で代用してみます。

import numpy
# 中略
i = numpy.random.randint(0, len(l))
import random
# 中略
i = random.randint(0, len(l) - 1)

numpy.random.randint()は第1引数以上、第2引数未満の整数をランダムに返すのに対し、
random.randint()は第1引数以上、第2引数以下の整数をランダムに返します。
なので書き換えるときは第2引数の値を1小さくするといいでしょう。

この状態でビルドするとサイズを6498KBまでに抑えることが出来ました。当初の1/3以下です。

所感

作ってpyファイルとして実行するときは軽量だったので何も考えずにnumpyを使いましたが、exe化した後ことも考えてライブラリを選んだ方がよさそうです。
可能なら標準ライブラリを選んだ方が、ファイルサイズを抑えられることがあります。