Date: 2009-07-30
Tags: python, programming

buildoutで開発 番外編: eggにrevision番号が付かない

eggのファイル名は例えば wsgiapp-0.1dev_r10-py24.egg となっていて、各種設定から自動的に適切な名前が付けられるようになっている。簡単にまとめると以下のような感じ:

wsgiapp

パッケージ名。setup.pyのname引数

0.1

バージョン番号。setup.pyのversion引数

dev

タグ。setup.cfgのegg_infoセクションのtag_buildの値

r10

リビジョン。setup.cfgのegg_infoセクションのtag_svn_revisionがtrueの場合に自動設定

py24

Pythonのバージョン。インタプリタバージョンが自動取得される

これらのうち、リビジョン番号は setup.cfgでtag_svn_revisionがtrue でかつ、 svnクライアントのversion <= 1.5 でないと正しく設定されない。

前者は仕様なので、setup.cfgが無かったら作成して、[egg_info]セクションにtag_svn_revision = true と書いておけば良い。ちなみにsetup.cfgはsetup.pyのデフォルト引数を定義しておけるファイル。egg_infoセクションに何が書けるかは、 python setup.py egg_info --help で表示されるOptions項を見よう。

後者はsetuptools-0.6c9がsvn-1.6系の新しいクライアントに対応出来てないため。svnコマンドが1.6系の状態で 'easy_install' や 'setup.py bdist_egg' を実行すると以下のようにエラーが表示される(がr0として処理が継続する)。

easy_install

> easy_install ....
...
unrecognized .svn/entries format; skipping .
unrecognized .svn/entries format in
...

setup.py bdist_egg

> python setup.py bdist_egg
...
unrecognized .svn/entries format; skipping .
...
unrecognized .svn/entries format in
...

今は.svn/entriesを解析して取得していて、上記のようになってしまうのは.svn/entriesのフォーマット解析に失敗しているため。同じ理由で、.svnじゃなくて_svnに管理情報を格納するように設定している場合(TortoiseSVN等)にもr0になってしまう。今後はどのバージョンのsvnクライアントでも動作するように svn info --xml で情報を取得するようになるらしい(Issue64, Issue79)。

とりあえずsetuptools-0.6c9を使ってeggを作ったり、リポジトリから直接easy_installする場合はsvnクライアントを1.5系にして.svnに管理情報を保存する設定になっていればOK。

参考

  • Issue64 (Subversion 1.6 entries format 'unrecognized')

  • Issue79 (SVN Entries parsing should use local svn command for implementation)