web-dev-qa-db-ja.com

アプリエンジン:ImportError:Crypto.Hashという名前のモジュールがありません

Crypto.Hashを使用するスクリプトがありますが、インポートがエラーで失敗します:

ImportError: No module named Crypto.Hash

私のsys.pathsys.pathリストを印刷すると、(とりわけ)次のエントリがあります。

/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/pycrypto-2.6

上記のパスを開くと、pycrypto-2.6ディレクトリがありません。

Pycrypto 2.6をロードするにはどうすればよいですか?

コマンドラインからCrypto.Hash running pythonをインポートすると、機能します

PycryptoはAppEngineでサポートされており、 このリスト に含まれていることを指摘する必要があります。

さらに、モジュールをapp.yamlファイルに含めました。

libraries:
- name: webapp2
  version: "2.5.2"
- name: pycrypto
  version: latest
- name: lxml
  version: "2.3"
- name: ssl
  version: latest

それが機能するappengineで本番環境でコードを送信する場合、問題は私のシステムにあります。おそらくpycryptoのコンパイル済みバージョンをダウンロードして、appengineが使用できる場所に配置する必要があります。

11
JackNova

MAC OSXで発生する問題のようですが、私が何とかしたのは次のとおりです。

まず、pycriptoのインストールがどこにあるかを知る必要があります。

Sudo pip install pycrypto

ライブラリをインストールするか、ライブラリがインストールされているパスを取得します

要件はすでに満たされています(アップグレードするには--upgradeを使用してください):pycrypto in .. ..

次に、これはappengineの本番環境では発生しない問題であることを考慮して、次のようにしました。

try:
    from Crypto.Hash import SHA
except ImportError:
    import sys
    sys.path.append('/[mypath]/anaconda/lib/python2.7/site-packages')
    from Crypto.Hash import SHA # requires PyCrypto
10
JackNova

GUIではなくdev_appserver.pyを使用してコマンドラインからSDKを実行しますpipを介してインストールされていることをすでに確認していることを前提としています)。

ライブラリがインストールされていても、本番環境では正常に機能していても、AppEngineがライブラリをローカルにインポートしないという同様の問題が発生しました。参照が見つかりませんが、MySQLDBが思い浮かびます。とにかく、これは私のために働いた。

1
Chris