読者です 読者をやめる 読者になる 読者になる

Keep on moving

あんまりまとまってないことを書きますよ

buildout入門(エキスパートPythonプログラミング読書会09に参加してきました)

イベント python

エキスパートPythonプログラミング読書会09 : ATNDに参加してきました
主催の清水川さん、会場提供いただいた アスキーメディアワークス様ありがとうございます。
今回の話題はbuildoutでした。簡単に自分用にメモをまとめておきます。

# 2011.02.19 id:shimizukawaさんからのご指摘でdefault.cfgの書き方を修正

buildoutってなんぞ

pythonの構成管理ツール。
こんな感じで実行する。

$ cd /tmp
$ curl -O "http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py"
$ cd ~/hoge/
$ python /tmp/bootstrap.py init --distribute

ってやるとbuildout.cfgっていうファイルができる。
buildout.cfgは要はWindowsアプリなどで使われるIniファイル。
こんな感じで書く

[buildout]
parts = demo

[demo]
recipe = zc.recipe.egg
eggs = bucho
interpreter = py

buildout.cfgを編集したら以下コマンドを実行すると指定したファイルを持ってきて環境を作ってくれる

$ bin/buildout 
$ bin/py

bin/pyを実行するとIndex of Packages : Python Package Indexパッケージが使えるようになる

本ではzc.buildoutをeasy_installいれているが、bootstrap.pyを使うと複数バージョンのzc.buildoutが試せるのでこちらを使った方がベター。
bootstrap.pyはzc.buildoutを持ってくる。zc.buildout はそのeggsフォルダに格納される。

また、setuptoolsは更新が止まっているのでかならずdistibuteを使うようにする。
なお、bootstrap.pyをたたいたpythonがその後の環境で使われるので、pythonバージョンごとの環境を作ることも可能。

共通の設定

~/buildout/default.cfgファイルを作ると、bin/buildout実行時に必ず参照される。
共通の設定はここに書いておくと管理が楽。
download,eggsをキャッシュする

[buildout]
index = http://b.pypi.python.org/simple
eggs-directory = /User/xxx/.buildout/eggs      # pathを指定。~は使えない
download-cache = /User/xxx/.buildout/downloads # pathを指定。~は使えない
newest = false                                 # buildout実行時に最新のパッケージをとりにいかない

コマンドでnewestを指定することも可能.'-n'オプションを使う

$ buildout -n

virtualenvの--no-site-packagesっぽいことをする

実行パスからsite-packagesをのぞいて、箱庭環境を作る.
recipeでz3c.recipe.scripts 1.0.1 : Python Package Indexを使う。

[buildout]
parts = demo

[demo]
recipe = z3c.recipe.scripts
eggs = bucho
interpreter = py

include-site-packages=false
exec-sitecustomize = false 

Index of Packages : Python Package Indexでは"exec-sitecustomize=false"を必ずつけるべしって
書いてあるけど、なんで必要なのかはわからない。
別にtrueにしてもsite-packages/sitecustomize.pyが適用される訳ではないみたい。

まとめ

今までvirtualenvwrapper + pipを中心に開発環境を作ってきましたが、同じ環境を何度も作る
必要があるときはなるべくbuildoutを使っていこうと思います。
今は機会がないですが、複数人でpythonを使って開発を行う際にも環境を作るのが
楽になりそうですね。