概要
- pyinstallerでデータの前処理プログラムを書いたときのexe大きすぎ問題の解決法
問題
- いやいや、大きすぎでしょ・・・
- importしたのはこの子達。重そうなのはpandasかなって思ってました。
(変なimportの仕方は、これで少しでも軽くなるかなって思ってやったんだ・・・)
import
import glob
import os
import re
import sys
from datetime import datetime, timedelta
from pandas import read_csv, DataFrame, concat
解決策
- どうも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 )
結果
- こうなりました。