« ホジキン・ハクスレーモデルが否定される? | トップページ | iPhone6発売日に靴を買いにAPPLE SHOP(ジーンズ屋)に並ぶ人。 »

2014年9月16日 (火)

py2exeでパッケージングした時のライブラリのサイズまとめ。scikit-imageがやたらコンパクトな件

Pythonlogo1

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」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« ホジキン・ハクスレーモデルが否定される? | トップページ | iPhone6発売日に靴を買いにAPPLE SHOP(ジーンズ屋)に並ぶ人。 »

しろののツイッタータイムライン

  • ツイッターは5つ目も凍結されました。6つ目での復活も不可能。なのでnoteに注力しています。

    と思ったら、イーロン・マスクの買収が公になってアカウントが復活できました。ありがとうマスク。

    トランプ関連記事の一覧リスト

オススメたち

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

はてブ

無料ブログはココログ