【Python】pyinstallerの軽量化【exe大きすぎ問題】

Python

こんにちは、snuowです。社給品のPCの場合、好き勝手にソフトウェアをインストールできないことがあると思います。そんな時環境構築できないWindowsPCにおいて、pythonで作成したプログラムを動かす場合、pyinstallerを使うことがあると思います。

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

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

タダでプログラミング学ぶなら【0円スクール】

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程度に減らすことができました。

環境構築できないPC向けに作成しましたが、これでもまだ大きい気がしますね。動作的には問題ないのですが・・・

もし、より減らせる方法があれば教えてください。

TIPS:pyinstallerでアイコンを設定する方法

  • pyinstallerでは自由にアイコンを設定することができます。下記に、アイコンの設定方法を紹介していますので参考にどうぞ!

【世界で5万人が受講】実践 Python データサイエンス・オンライン講座

コメント

タイトルとURLをコピーしました