Google App Engine環境で外部モジュールをimport(その2)

http://d.hatena.ne.jp/kinjoujX/20101224/1293199781
からトラバもらいました。情報ありがとうございます!


Pythonのモジュールのことを少し調べてみた。
Pythonにはdistutilsというモジュール配布ユーティリティがあるらしい。
モジュールの親ディレクトリに大抵入ってるsetup.pyがそれ使ったもの。
んで、みんな大好きsetuptools(英語解説)(日本語解説:未完)はその拡張。
解説読んでたら、setuptoolsを使ってるモジュールをインスコしたら、自動的に最新のsetuptoolsもインスコされるらしい。
結構気軽に使ってるけど、依存パッケージも自動的にインスコするし、何を追加したのか把握できなくなりそうだ。気をつけて運用しよう。


setuptoolsのリファレンス読み終えて、件のeggについて。
見た感じ、ファイル群をzipで固めて扱い易くしたものって感じ。
setuptoolsによる拡張形式だけど、作成にsetuptoolsが必要なだけで、入ってないPythonでもimport(zipimport)できるっぽい。
作成方法は、"setup.py bdist_egg"でよさげ。distフォルダが作成されて、その中にeggができる。
ただ、Jinja2-v2.5.5ではzip-safeフラグがない(というか、not-zip-safeフラグが入ってる)ので、easy_installとかすると、setuptoolsはそれ認識してディレクトリ形式で展開するみたい。
何でnot-zip-safeなのかはまだちゃんと調べてないけど、Jinja2に含まれてるtestsuiteってのにhtml形式のテンプレートが入ってたからかもしれない。*1
testsuiteの中身ちょっと覗いてみたけど、APIのテストの為に使う感じだった。多分いらないけど、まあ邪魔でもないので置いといた。
ということで、eggにしても問題なく使えそう。
詳しく調べるのはまた暇があるときに回して、今回はディレクトリで扱うことにした。時々ソース覗いたりするしね!


あと、昨日のエントリで出てたエラーだけど、何でpkg_resources.py要求すんだ、って思ってソース内検索とかしてみたところ、PackageLoaderを使った時に限り、pkg_resourcesをimportするぽい。
なので、FileSystemLoaderとか使う分には全く問題なく使えるみたい。てかPackageLoaderをテストで使ってみなけりゃスルーできた問題だったw
やっぱ対症療法してると駄目だね!うむ!
とりあえず、パッケージについて少し賢くなったので良しとします。

*1:zipimportのリファレンスに「*.pyと*.py[oc]しかimportしないよ」的なことが書いてあったと思う。