【问题标题】:CryptoUnavailableError: No crypto library available (using oauth2client in google app engine)CryptoUnavailableError:没有可用的加密库(在谷歌应用引擎中使用 oauth2client)
【发布时间】:2015-09-14 08:59:23
【问题描述】:

我正在使用 gspread 将我的应用程序连接到电子表格,为此我使用以下代码

import json
import gspread
from oauth2client.client import SignedJwtAssertionCredentials

json_key = json.load(open('service_account.json'))
scope = ['https://spreadsheets.google.com/feeds']
credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)
gc = gspread.authorize(credentials)
sheet = gc.open('Order Database').sheet1

当我在空闲时使用它来访问电子表格时,同样的代码运行良好。但是当我在我使用 Google App Engine 的应用程序的代码中使用它时,当我运行应用程序并尝试访问该页面我收到此错误

ERROR    2015-09-14 08:49:44,263 wsgi.py:263] 
Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "/Users/mbp13inch/Documents/Workspace/ehscanteen/main.py", line 15, in <module>
    db = Database()
  File "/Users/mbp13inch/Documents/Workspace/ehscanteen/server.py", line 10, in __init__
    credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)
  File "/Users/mbp13inch/Documents/Workspace/ehscanteen/lib/oauth2client/util.py", line 142, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/Users/mbp13inch/Documents/Workspace/ehscanteen/lib/oauth2client/client.py", line 1622, in __init__
    _RequireCryptoOrDie()
  File "/Users/mbp13inch/Documents/Workspace/ehscanteen/lib/oauth2client/client.py", line 1573, in _RequireCryptoOrDie
    raise CryptoUnavailableError('No crypto library available')
CryptoUnavailableError: No crypto library available

我什至成功安装了项目目录中的库:

pip install -t lib PyOpenSSL
pip install -t lib gspread
pip install -t lib oauth2client
pip install -t lib cryptography 

我什至尝试将--upgrade 添加到每个文件中,并且所有文件都已成功安装,但出现相同的错误

如果我做错了什么,请告诉我,我该如何解决这个问题?

提前致谢。

【问题讨论】:

  • 错误是来自本地应用服务器,还是来自生产环境?或两者?从日志中我猜它是本地的
  • 如果你做一个测试脚本,你可以手动import这个库吗?
  • @TimCastelijns 我正在使用 google app engine 应用程序在本地运行它......以及通过库你在谈论哪些?
  • 找不到的那个,crypto
  • 如果你告诉我添加这个:from OpenSSL import crypto 我得到一个ImportError: No module named cryptography.hazmat.bindings._openssl

标签: python google-app-engine pyopenssl oauth2client gspread


【解决方案1】:

好的,我终于解决了这个问题。我实际上所要做的就是将以下内容添加到app.yaml

libraries:
- name: pycrypto
  version: "latest"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多