niiyan's blog

niiyanの個人ブログ。

Google App Engine Oil (GAEO) を ZIP で利用する

GAEO で生成したアプリの main.py を眺めていたら、こんな箇所がありました。

# use zipped gaeo

try:
    import os
    if os.path.exists('gaeo.zip'):
        import sys
        sys.path.insert(0, 'gaeo.zip')
except:
    print 'use normal gaeo folder'

import gaeo
from gaeo.dispatch import router

gaeo.zip をインポートとしようとしているみたいですが、アプリのフォルダには gaeo.zip は見当たりません。

調べてみると、自分で gaeo フォルダを ZIP 形式に
圧縮すればいいみたいです。

GoogleAppEngine ハッカソンNo.2に参加してきました。 - a2c.get.diary

ファイル数が減るのでアップロードの時間が短くなるそうです。

ただ、さらに調べてみると、少し気になる記述を発見しました。

  • モジュールが初めてインポートされる際は、モジュール アーカイブはより多くの CPU 時間を必要とします。インポートは同じアプリケーション インスタンスに対する要求に備えてメモリにキャッシュされ、アーカイブからインポートされたモジュールは圧縮されずにコンパイルされた状態でキャッシュされます。このため同じインスタンスのその後のインポートでは、解凍やコンパイル処理による CPU のオーバーヘッドが発生しません。
  • App Engine で実行する zipimport は .py ファイルのみサポートしています。コンパイル済み .pyc ファイルはサポートしていません。
http://code.google.com/intl/ja/appengine/articles/django10_zipimport.html

アーカイブ内に .py ファイルしか入っていない場合, Python がアーカイブを変更して, .py ファイルに対応する .pyc や.pyo ファイルを追加したりはしません。つまり,ZIP アーカイブ中に .pyc が入っていない場合, import はやや低速になるかもしれないので注意してください。

http://www.python.jp/doc/2.5/lib/module-zipimport.html

さて、どうしたものか……。