« ホジキン・ハクスレーモデルが否定される? | トップページ | 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」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

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

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1169291/57387673

この記事へのトラックバック一覧です: py2exeでパッケージングした時のライブラリのサイズまとめ。scikit-imageがやたらコンパクトな件:

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

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年11月
      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    

IT技術注目記事

無料ブログはココログ