Google App Engine環境で外部モジュールをimport

ちゃんと全容を把握しているわけではないけど、対症療法的に、一応メモ。


今回、テンプレートエンジンとしてJinja2を使ってみようと思って*1、色々試してみた。
IDEEclipseを使ってるので、プロジェクトのルートディレクトリに'jinja2'フォルダを作成して、その中にここからもらってきたJinja2の本体をインポート。
そのままだと、pkg_resources.pyを要求してくるので動かせない。


なので、setuptoolsの中にあるpkg_resources.pyをここからもらってきて、それをルートディレクトリにインポート。


次に、pkg_resources.pyはsys.unlinkなんかをインポートするんだけど、GAEではファイルシステム系は動かないように出来てるから、インポートエラーが出る。
なので、このページを参考にしてpkg_resources.pyを書き換える。try-exceptを使用してエラーを抑制。
上のリンク先のページの2レス目の差分はZipimportのエラーハンドリングもしてるけど、現在のGAEではZipimportをサポートしてる*2ので、1レス目の差分を参考にすればいいと思う。
また、このページは結構古くて、setuptoolsの中身が多少変わってるので、diffはそのままでは最新版に使えない。
一応、差分を適用したものはこれ→http://htn.shak.jp/misc/pkg_resources.py.txt


もうちょっと暇があれば、詳しいGAEの制限もチェックしていきたい。
Python3がスタンダードになるのはいつだろなー。

*1:webappで使えるDjangoのテンプレートエンジンは挙動が微妙

*2:cf.http://code.google.com/intl/ja/appengine/articles/django10_zipimport.html