この記事のURL

http://www.dango-itimi.com/blog/archives/2011/001096.html


FLASH tips 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 はまだサポートされていない」という事に対するエラーの可能性あり。

[ FLASH ] [ tips ] 投稿者 siratama : 2011年12月08日 16:20

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/1056

コメント

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]