はじめに
pyinstaller、とても便利です。なにせ配布が楽ですから。
ただ、出来上がったバイナリが重すぎです。これを(場合によっては)さくっと解決するために、この記事を書きました。なお、本記事では Windows で Anaconda 環境の例になります。
例
まずは pyinstaller
でそのままバイナリ(exe)を作ってみましょう。
$ pyinstaller hogefuga.py --onefile
なんと 287MB ありました。
とても気軽に配布できそうもありません。
ちなみに、hogefuga.py
では、以下が import されています。
import bs4
import openpyxl
import shutil
import sys
対処
次に、以下のように --exclude-module
オプションに numpy
を指定して実行してみます。
$ pyinstaller <hogefuga.py> --onefile --exclude-module numpy
出来上がったバイナリは、81.9MB あります。だいぶ減りましたが、あと一声ほしいところです。
次は、さらに pandas
も除外してみます。
$ pyinstaller <hogefuga.py> --onefile --exclude-module numpy --exclude-module pandas
14.6MB のバイナリができました。これなら、そこまで気を使う大きさではないかと思います。
fogefuga.py
と同ディレクトリに fogefuga.spec
なるファイルができています。
このファイルを覗いてみると、 excludes
に numpy
と pandas
が設定されているのがわかりますね。
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['hogefuga.py'],
pathex=['D:\\hogefuga'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=['numpy', 'pandas'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='hogefuga',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )
おわりに
いかがでしょうか。せっかく便利にバイナリまでできたのに、ファイル容量が激重だったら残念ですよね。
仕事もファイルも少しでもスリム化できたら幸いです。