Zope/Ploneアドベントカレンダー 2009 のトリ--に選ばれたので、buildout関連のネタを少々。
みなさんご存知の通り、 buildout は、本来Zope3のために作られた構築ツールですが、 Zope2の完全egg化が2.12で果たされたので、 Plone や ERP5 等のZopeベースのプロジェクトでも積極的に採用されたり、 Pylons、Django、Repoze等、数多くの有名プロジェクトでも活用されたり、 今最もホットなPythonプロジェクトの一つと言えるでしょう。
さて、前振りはここまでとして、 buildoutを日常的に使うようになってくると、 もっと速く快適に使いたいという欲求がたくさん出てくるはずです。 そこで、buildout中毒になっている人がもっと気持ち良くなれる方法をいくつか紹介します。
まず、buildoutを使うと、簡単にローカル環境が構築できるので、複数バージョンを保持する機会が増えるでしょう。 普通にやると、似たようなbuildoutを使っていても、 eggは別々にダウンロードされて、インストールされます。 でもこれは大抵無駄ですよね。
そう感じたら、自分のホームディレクトリに
.buildout/default.cfg
というファイルを作り、
その中に、
eggs-directory
を定義します。
$ test -d ~/.buildout || mkdir .buildut $ test -d ~/eggs || mkdir ~/eggs $ cat <<EOF >~/.buildout/default.cfg [buildout] eggs-directory = $HOME/eggs EOF
こうすれば、デフォルトでeggの置き場所がホームの下のeggs
というところになって、
すでにあるeggをまたインストールし直したりしなくなります。
同じような話で、複数の環境で同じようなbuildoutを使っている場合、わざわざ PyPI から取ってくるのは無駄ですよね。 負荷が高くて遅いですし、たまに落ちていることもありますし。
そういう時には、 collective.eggproxy を使いましょう。 このツールは、PyPIのプロキシーとして動作し、 eggとかindex情報をキャッシュしてくれます。 使い方はとても簡単。
$ easy_install collective.eggproxy $ mkdir /tmp/eggs $ eggproxy_run
デフォルトで、localhost:8888を使用しますので、
あとは
buildout.cfg
で index
を指定すれば、大丈夫。
[buildout] index = http://localhost:8888/
さて、ますますbuildout中毒になってくると、いかにしてbuildoutの設定ファイルを共有するかが問題になってきます。
buildoutは extends
を使って、設定ファイルを継承させることができるので、当然こんな感じのことをしたくなります。
[buildout] extends = http://www.example.com/buildout/base.cfg
しかし、このままだと、buildoutを走らせる度、毎回アクセスしに行ってしまうので、遅いし、落ちていると機能しなくなります。
そこで簡単な方法は、extends-cache
を使うことです。
このパラメータを使うと、extends
の対象がキャッシュされ、毎回ダウンロードしなくて済むようになります。
[buildout] extends = http://www.example.com/buildout/base.cfg extends-cache = cache
しかし、それでも頻繁にbuildoutを走らせるとなると、やっぱり遅いって感じることはあります。
そういうbuildout依存症の人は、-N
を付けて走らせましょう。
$ bin/buildout -N
こうすれば、新しいバージョンのチェックを行わなくなるので、完全にアップデートする必要がない場合、圧倒的に速くなります。
このオプションをほとんどいつも使うようであれば、
~/.buildout/default.cfg
に書いてしまいましょう。
[buildout] newest = false
ただし、本当に新しくしたい時には、このオプションが設定に入っていると、明示的に -n
を付ける必要が出てきますので、注意しましょう。
$ bin/buildout -n
後もう一つだけ。 buildoutの動作の高速性はともかく、 設定ファイルをいじるのを楽にしたい人、 そんな人は mr.developer を見てみましょう。 きっと役に立ちます。
以上。