尝试在Docker上使用Google OAuth2时没有名为“请求”的模块

时间:2018-06-24 01:59:46

标签: python docker google-authentication

我正在尝试将google OAuth用于我的网络应用程序。为此,我在venv中以及在Docker构建期间(来自requirements.txt)安装了google-api-python-client和google-auth软件包。尽管如此,当我运行我的应用程序时,它找不到请求模块,抱怨:

flask.cli.NoAppException: While importing "debateit", an ImportError was raised:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/google/auth/transport/requests.py", line 23, in <module>
    import requests
ImportError: No module named 'requests'

导入如下:

from google.auth.transport import requests

,其用法类似于:

idinfo = id_token.verify_oauth2_token(token, requests.Request(), app.config["GOOGLE_LOGIN_CLIENT_ID"])

其他导入,例如id_token.verify_oauth2_token可以正常工作。

我检查了我的docker构建,并说我正确包含了google-auth:

Installing collected packages: ... google-auth, httplib2, google-auth-httplib2, google-api-python-client
Successfully installed ... google-api-python-client-1.7.3 google-auth-1.5.0 google-auth-httplib2-0.0.3 httplib2-0.11.3 ...

当我查看venv时,我可以清楚地看到google.auth.transport.requests模块,只是在应用程序本身中不起作用。

我想念什么?是什么原因导致找不到该模块?

4 个答案:

答案 0 :(得分:2)

所以我发现了问题所在-在google.auth.transport.requests模块中,他们尝试导入库“ requests”。我没有安装此库。我已经这样做了,现在就可以了。

我正在遵循的指南:https://developers.google.com/identity/sign-in/web/backend-auth没有提到您需要安装该库。我误解了在请求模块中导入请求应该做什么。

答案 1 :(得分:0)

the documentation中所述,它更有可能像这样:

import google.auth.transport.requests
import requests

request = google.auth.transport.requests.Request()

credentials.refresh(request)

但是出于您的目的,我建议:

from google.auth.transport.requests import Request

然后更改以下内容:

idinfo = id_token.verify_oauth2_token(token, requests.Request(), app.config["GOOGLE_LOGIN_CLIENT_ID"])

收件人:

idinfo = id_token.verify_oauth2_token(token, Request(), app.config["GOOGLE_LOGIN_CLIENT_ID"])

这是一个错误,因为在路径google.auth.transport.requests中没有名为requests的函数或类。

我的建议是基于

idinfo = id_token.verify_oauth2_token(token, requests.Request(), app.config["GOOGLE_LOGIN_CLIENT_ID"])

向我们表明,您使用了Requests()中存在的名为google.auth.transport.requests的类,正如您在the documentation中看到的那样。

答案 2 :(得分:0)

我知道已经回答了,但是您可以通过运行以下命令快速在全局范围内安装这些库:

 | - bin
 | - MyFunction
 | - host.json

如果有人不想在全球范围内安装库,请按照以下方法在本地虚拟环境中安装pip或安装库: https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/

答案 3 :(得分:0)

pip install requests

似乎 google.auth.transport.requests 使用了 requests