LoginSignup
1
0

More than 1 year has passed since last update.

激重 pyinstaller バイナリを軽くする

Last updated at Posted at 2021-10-12

はじめに

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 なるファイルができています。
このファイルを覗いてみると、excludesnumpypandas が設定されているのがわかりますね。

# -*- 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 )

おわりに

いかがでしょうか。せっかく便利にバイナリまでできたのに、ファイル容量が激重だったら残念ですよね。
仕事もファイルも少しでもスリム化できたら幸いです。

1
0
0

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
  3. You can use dark theme
What you can do with signing up
1
0