GAE 1.6.0 : python 2.7 PyCrypto ImportError
最近 Google App Engine(GAE) では python 2.7 が利用可能になったため、新しく python 2.7 用にアプリケーションを作成してみたところ、PyCrypto のモジュールをインポートする箇所でエラーが発生してしまう事がわかりました。
例えば以下の一行を記述するだけで、GAE のサーバ上では ImportError が発生してしまいます。
import Crypto.Cipher
python 2.5 のアプリケーションでは上記記述を行なっても問題なく動作します。GAE python 2.7 では何か別の記述が必要なのでしょうか?
行なった検証手順は、以下の URL にある「Hello, World!」を表示するだけのアプリケーションの二行目に「import Crypto.Cipher」を追加しただけ、となります。
http://code.google.com/intl/en/appengine/docs/python/gettingstartedpython27/helloworld.html
Dashboard から確認可能なログに出力されたエラー内容
Traceback (most recent call last): File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 168, in Handle handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 206, in _LoadHandler handler = __import__(path[0]) File "/base/data/home/apps/s~test-crypto/1.355228157185667132/helloworld.py", line 2, in <module> import Crypto.Cipher ImportError: No module named Crypto.Cipher
現状解決策が見つからないため、python 2.5 用のアプリケーションを別途作成しそちらで開発を進めることに。
追記)
GAE フォーラム「1.6.1 Pre-release SDKs are live」のスレッド内記述に以下の項目を発見。
- Fixed an issue in the SDK where importing Crypto.Util.Counter caused an ImportError.
今回の ImportError は次回バージョンで解決されるのかな?
追記2 2011/12/14)
本日 GAE 1.6.1 がリリースされたとのことで再度検証してみましたが、同じエラーが発生。
ちなみに Windows ローカル開発環境上では import Crypto.Cipher という記述ではエラーは発生しませんが、import Crypto.Cipher.DES という記述を行なうとエラーが発生します。
追記3 2011/12/14)
問題ほぼ解決。
python2.7 では外部ライブラリを用いる際、app.yaml に追記が必要なことがわかりました。
今回の場合、以下の記述を行えばサーバ上で ImportError は発生しなくなりました。
libraries: - name: pycrypto version: latest
GAE ドキュメントをしっかり読んでいなかった私のミスでした。
残りの問題は、Windows ローカル開発環境上での ImportError のみ、となります。
Windows Vista 上での ImpoerError は以下のような記述になっています。
ImportError: DLL load failed: %1 は有効な Win32 アプリケーションではありません。
ファイル権限が関係している感じがします。引き続き調査を行います。
もしかしたら「GAEローカル開発環境では python 2.7 はまだサポートされていない」という事に対するエラーの可能性あり。