ImportError: No module named _ssl
GoogleAppEngineのローカルデバッグ環境でDropboxのSDKを使用した際に以下のエラーが発生した
ERROR 2013-11-02 07:21:59,539 cgi.py:121] Traceback (most recent call last): (中略) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 60, in <module> import _ssl # if we can't import it, let the error propagate File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 867, in load_module raise ImportError('No module named %s' % fullname) ImportError: No module named _ssl
「_ssl」というモジュールがないのが原因のようだがデフォルトではモジュール一覧に含まれていないようなので、 エラーメッセージに書かれている「sandbox.py」を修正する
$ sudo vi /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py
「_WHITE_LIST_C_MODULES」に「_ssl」を追加するだけで大丈夫でした。
変更前(754行目辺り)
_WHITE_LIST_C_MODULES = [ 'array', '_ast', 'binascii', (省略)
変更後
_WHITE_LIST_C_MODULES = [ '_ssl', 'array', '_ast', 'binascii', (省略)
AppEngineのランチャーから再起動すると問題なくDropboxのSDKが使えるようになりました。
Windowsの開発環境でも同様の現象が確認できましたが同じ手順で解決。
デプロイするときは「app.yml」に「ssl」を追加します。
libraries: - name: ssl version: "latest"