2010/05/28

CentOS5.3でbbfreezeを使ってmatplotlibを使用したGUIをバイナリ化

ネット上で拾ったあるソース↓を
CentOS5.3でバイナリ化してみた。
-----------------------------
import math
from pylab import *
def gaussfunc(x,y,a,b):
return exp(-a*(x)*(x)-b*(y)*(y))

dx, dy = 0.05, 0.05
x = arange(-3.0, 3.0, dx)
y = arange(-3.0, 3.0, dy)
X,Y = meshgrid(x, y)
Z = gaussfunc(X, Y,1.0,0.5)*(2*X)*(4*Y*Y-2)
im = imshow(Z,origin='lower' ,alpha=.9)
colorbar(im)

cset = contour(Z, arange(-2.0,2.0,0.2), origin='lower' )

clabel(cset,
inline=1,
fmt='%1.1f',
fontsize=10)

hot()
show()
-----------------------------

バイナリ化にはbbfreezeを使用。
bbfreezeやmatplotlibのインストール方法は
以前の記事を参照。


"setup.py"という名前で下記の通り書く。
※別に"setup.py"という名前にする必要はない。
-----------------------------
from bbfreeze import Freezer
import glob

f = Freezer("dist",includes=('pangocairo',
'atk',
'matplotlib.backends',
'matplotlib.backends.backend_qt4agg',
'matplotlib.figure',
'pylab','numpy',
'matplotlib.numerix.fft',
'matplotlib.numerix.linear_algebra',
'matplotlib.numerix.ma',
'matplotlib.numerix.mlab',
'matplotlib.numerix.random_array',
'matplotlib',
'cairo',),
excludes=('_cairo',
'_gtkcairo',
'_gtkagg',
'_tkagg',
'_agg2',
'_cocoaagg',
'_fltkagg','_gtk',))
f.addScript("test.py" , True)

f()

-----------------------------

これを実行。

$ python setup.py


すると"dist"というディレクトリが作成される。
distディレクトリに移動し下記の通り必要なファイルをコピーする。

$ cp -r /usr/lib64/python2.4/site-packages/matplotlib/mpl-data .
※これをやらないとバイナリファイル実行したときに
 data fileが無いって内容のエラーがでる。


そしてできあがったバイナリファイル"test"を実行。

$./test

でOK。


setup.pyには不要なincludeが入ってると思われる。
扶養なものは削ってスマートにしたい。

CentOS5.3にbbfreezeをインストールする

easy_install のインストール

bbfreeze(フローズンバイナリ作成ツール)はCentOSのリポジトリには含まれていないので、
自分でソースをとってきてインストールする必要あり。
そんなときに重宝するのが easy_install 。

easy_install は python のパッケージの管理を容易にするためのツールで、
パッケージのダウンロードから、ビルド、インストール、
それにインストール済みパッケージのアップデートや削除などを行える。
bbfreezeもeasy_install に対応しているので、かんたんにインストールできる。

さて、easy_install 自身のインストールに関して、easy_install は setuptoolsに含まれていて
これは CentOSのBaseリポジトリで管理されているので、インストールはyum一発。

(1)setuptoolsのインストール
# yum install python-setuptools (rootで)

(2)bbfreezeのインストール
# easy_install -U bbfreeze (rootで)

何かエラーが出た。
"yum install -U python-setuptools"を試せ(-U オプションはupgrade)と言われてる
ようなのでその通り実行。
# yum install -U python-setuptools

んで、再度下記を実行。
# easy_install -U bbfreeze

うまく入ったっぽい。


(3)バイナリ作成

http://python.matrix.jp/modules/bbfreeze.html

にあるようにスクリプト(setup.py)を作成。
-----------------------------------
from bbfreeze import Freezer
f = Freezer( "dist")
f.addScript("test.py" , True)

f()
-----------------------------------
その後、

$ python setup.py
を実行するとディレクトリdistが作られ、
その中にtestというファイル名の実行ファイルができている。

2010/05/27

CentOS5.3にmatplotlibをインストール

pylabはインターフェイスで、本体はmatplotlibなので、それをインストールする。
また、そのままだとyumではlapackがインストールされないので、それも入れる。

yumでインストールするには
前回の記事のようにリポジトリを追加しとく必要があるかも。

# yum install python-matplotlib
# yum install lapack


ネットで拾ってきたmatplotlibを使ったサンプルを
動かそうとしらたnumpyってモジュールが無いと怒られた。

CentOSのパッケージマネージャでnumpyを検索したら出てきたので
それをインストール。

無事サンプルが動いた。