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として処理が継続する)。
今は.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。