ただ、pandas などの重量級ライブラリを使用すると、--onefileで exe にまとめたときに、200MB を超える巨大なファイルになってしまいます。この exe 大きすぎ問題を解決したいと思います。

240MB は重すぎでしょ・・・

pandas 導入時の exe 重すぎる問題・・・

私が、当時作ったツールで使用したライブラリは下記のようになっていました。pandas から特定の機能だけ抜き出したら軽くなるのでは?と思ったがそんなことはなかったぜ・・・

 
import glob
 
import os
 
import re
 
import sys
 
from datetime import datetime, timedelta
 
from pandas import read_csv, DataFrame, concat
 

解決策:MKL が重い原因だった。

  • MKL***というのが悪さをしているらしい。
  • .spec ファイルに下記の項目を追加する。
  • .spec ファイルは、pyinstaller を動かしたときに中間ファイルとして作成されます。
\# -\*- mode: python -\*-
block\_cipher = None
import sys
 
sys.setrecursionlimit(50000)
 
a = Analysis(\['C:\\\\Users\\\\\*\*\*\\\\PycharmProjects\\\\tool\_for\_armadillo\\\\main.py'\],
             pathex=\['C:\\\\Users\\\\\*\*\*'\],
             binaries=\[\],
             datas=\[\],
             hiddenimports=\[\],
             hookspath=\[\],
             runtime\_hooks=\[\],
             excludes=\[\],
             win\_no\_prefer\_redirects=False,
             win\_private\_assemblies=False,
             cipher=block\_cipher,
             noarchive=False)
 
pyz = PYZ(a.pure, a.zipped\_data,
             cipher=block\_cipher)
 
#---------------追加ここから---------------
 
Key = \['mkl'\]
 
def remove\_from\_list(input, keys):
    outlist = \[\]
    for item in input:
        name, \_, \_ = item
        flag = 0
        for key\_word in keys:
            if name.find(key\_word) > -1:
                flag = 1
        if flag != 1:
            outlist.append(item)
    return outlist
 
a.binaries = remove\_from\_list(a.binaries, Key)
 
#---------------追加ここまで---------------
 
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          \[\],
          name='main',
          debug=False,
          bootloader\_ignore\_signals=False,
          strip=False,
          upx=True,
          runtime\_tmpdir=None,
          console=True )

結果:1/5 くらいには減らせました。

55MB 程度に落ち着きました。

1/5 程度に減らすことができました。