py2exeでパッケージングした時のライブラリのサイズまとめ。scikit-imageがやたらコンパクトな件
cx_FreezeとかPyInstallerとかありますが、パッケージ化自体はcx_freezeとかのほうが簡単だったりしますが、私の場合、シングルファイルにパッケージ化したい、かつシングルファイルでパッケージ化したときの起動が速いことを重視して、いまだにpy2exeを使っています。でも、他のツールもデフォルトのままでいけちゃう率が多少高いだけな気がするので、py2exeの方が長年ウェブに蓄積された情報があるので、トラブった時は逆に有利だったりしないかと思ってたりします(推測)。
scipyとかパッケージ化するとデカイので、なんとかして部分的にサブパッケージだけインポートできないものか今日ちろっと試していていたんですが、結局from文で好きなのだけインポートしようとしても、もろもろとパッケージに入ってしまうようで、必要なソースコードを抜き出して、別のPythonパッケージとして自分で構成しなおさないとダメそうだったのでやめました。scipyに関しては、scikitシリーズが取って代わってくれそうなのでそっちに期待。
その過程でいろいろとライブラリの組み合わせでのサイズの変化が分かったので、覚書。
サイズまとめ
print 'py2exe packaging test!'
というインポートのないファイルをGUI2EXE経由でpy2exeをデフォルトのままでパッケージ化してみると
5.45MB
という結果になりました。結構でかいですね。
まずはインポートなしでどこまで小さくなるかに挑戦。
setup.pyのexcludesオプションに色々と足して、私の場合こんなのを使っています。
excludes = ['_gtkagg', '_ssl', '_tkagg', 'bsddb', 'curses', 'doctest', 'email', 'pdb', 'pyreadline', 'pywin.debugger', 'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl', 'Tkconstants', 'Tkinter']
として、"optimize": 2, "compressed": 2で圧縮もしてみると
3.81MB
までいきました。
python27.DLLが2.33MBあるので、これが無圧縮での限界ですが、割りと近くまでいきました。
import wx
GUIにはwxを使うので、この状態でwxpythonのみをインポートすると
13.41MB
ふーむ、割りと大きい。
from PIL import Image
from PIL import ImageDraw
from PIL import TiffImagePlugin # for py2exe
PILというかPillowのみをインポートすると
5.67MB
まあまあ。
import numpy as np
NUMPYのみをインポートすると
18.70MB
となりました。
面白いのはscikit-imageで
import numpy as np
import skimage
Numpyと一緒にインポートしても
18.72MB
なんかNumpyに依存しているので内部でNumpyをインポートしていると思われますが、そこからほとんどサイズが変わらない。怪しいくらい増えてないんだけど、、、。
厄介なのはScipy。とてもでかいが、割と使うので外せない。
import scipy.ndimage
import scipy.io as sio
## for py2exe
from scipy.sparse.csgraph import _validation
import scipy.special._ufuncs_cxx
import scipy.io.matlab.streams
下の3行はpy2exeでパッケージ化したときにエラーになるのでインポートを明示的にしないといけないのでつけています。
scipy.ndimageやscipy.io、たまにstatsあたりををよく使うのですが、
ioだけで
54.31MB
になりました。ndimageを追加しても変化がないのでScipyは一気にインポートされているようです。Numpyももちろん依存しているので含まれています。
つまりScipyは一個でもつかったらNumpyに25MB追加という感じらしいですね。
skimageでscipy.ndimageを大体置換できそうだけどsioのかわりが見つからない。
つぎはmatplotlib。これもでかいぞ。
import matplotlib
とすると
49.72MB
Numpyは含まれる。でもこれmpl-dataフォルダなしなので実際は5.78MB増えて約56MBってところか。
ふーむ軽いプロットライブラリはないものか。
ちろっと調べたらvivisというのが面白そう。
« ホジキン・ハクスレーモデルが否定される? | トップページ | iPhone6発売日に靴を買いにAPPLE SHOP(ジーンズ屋)に並ぶ人。 »
「Python」カテゴリの記事
- Noteの記事をPythonでバックアップしといた。(2021.05.05)
- JupyterLabでも好きな外部エディターを使いたい!(2018.05.02)
- ローカルエリア内のJupyterLabサーバーにLAN経由で接続する。(2018.05.02)
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
- Juliaやってみよう。四日目。@timeでプロファイリング(2017.07.16)
« ホジキン・ハクスレーモデルが否定される? | トップページ | iPhone6発売日に靴を買いにAPPLE SHOP(ジーンズ屋)に並ぶ人。 »
コメント