buildout2.x で appfy.recipe.gae を動かす方法
昨日、@yuitowest に Interactive Shell for blockdiag のデザイン調整を依頼したときに気づいたのですが、
buildout で Google AppEngine の開発環境を整えるためのレシピである appfy.recipe.gae が buildout 2.x系では動作しなくなっていました。
具体的には buildout を実行すると以下のエラーが出ます。
$ bin/buildout -N While: Installing. Getting section app_lib. Initializing section app_lib. Loading zc.buildout recipe entry appfy.recipe.gae:app_lib. An internal error occured due to a bug in either zc.buildout or in a recipe being used: Traceback (most recent call last): File "/Users/tkomiya/.buildout/buildout-eggs/zc.buildout-2.1.1-py2.7.egg/zc/buildout/buildout.py", line 1921, in main getattr(buildout, command)(args) File "/Users/tkomiya/.buildout/buildout-eggs/zc.buildout-2.1.1-py2.7.egg/zc/buildout/buildout.py", line 486, in install [self[part]['recipe'] for part in install_parts] File "/Users/tkomiya/.buildout/buildout-eggs/zc.buildout-2.1.1-py2.7.egg/zc/buildout/buildout.py", line 1084, in __getitem__ options._initialize() File "/Users/tkomiya/.buildout/buildout-eggs/zc.buildout-2.1.1-py2.7.egg/zc/buildout/buildout.py", line 1188, in _initialize self.initialize() File "/Users/tkomiya/.buildout/buildout-eggs/zc.buildout-2.1.1-py2.7.egg/zc/buildout/buildout.py", line 1194, in initialize recipe_class = _install_and_load(reqs, 'zc.buildout', entry, buildout) File "/Users/tkomiya/.buildout/buildout-eggs/zc.buildout-2.1.1-py2.7.egg/zc/buildout/buildout.py", line 1153, in _install_and_load req.project_name, group, entry) File "/Users/tkomiya/bin/python/lib/python2.7/site-packages/pkg_resources.py", line 357, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/Users/tkomiya/bin/python/lib/python2.7/site-packages/pkg_resources.py", line 2394, in load_entry_point return ep.load() File "/Users/tkomiya/bin/python/lib/python2.7/site-packages/pkg_resources.py", line 2108, in load entry = __import__(self.module_name, globals(),globals(), ['__name__']) File "/Users/tkomiya/.buildout/buildout-eggs/appfy.recipe.gae-0.9.3-py2.7.egg/appfy/recipe/gae/app_lib.py", line 70, in <module> from z3c.recipe.scripts.scripts import Scripts File "/Users/tkomiya/.buildout/buildout-eggs/z3c.recipe.scripts-1.0.1-py2.7.egg/z3c/recipe/scripts/__init__.py", line 1, in <module> from z3c.recipe.scripts.scripts import Scripts, Interpreter File "/Users/tkomiya/.buildout/buildout-eggs/z3c.recipe.scripts-1.0.1-py2.7.egg/z3c/recipe/scripts/scripts.py", line 19, in <module> from zc.recipe.egg.egg import ScriptBase ImportError: cannot import name ScriptBase
エラーの原因は z3c.recipe.scripts は buildout2 には対応していないために起きているようです。
(zc.recipe.egg に機能がマージされた?
自分の開発環境ではうまく動いているのに…と思っていたのは、単に手元では buildout 1.7.1 で動かしていたからだったんですね。
今後どうすればいいの?
appfy.recipe.gae のリポジトリ を見ると buildout_2 というブランチがあり、ここでは zc.recipe.egg を使うよう変更されています。
この変更はまだリリースされていないので、buildout.cfg で github リポジトリを指定することで利用することができます。
[buildout]
find-links = https://github.com/prmtl/appfy.recipe.gae/tarball/buildout_2#egg=appfy.recipe.gae-0.9.4
versions = versions[versions]
appfy.recipe.gae=0.9.4
手元ではこの設定で buildout2 上で動作させることができました。
ちなみに、試していないものの rod.recipe.appengine というものもあるようです。
今年に入っても何度かリリースされているし、History に zc.recipe.eggs という文字が見えるので、こちらでも行けるかもしれません。