如何防止 Google App Engine 上出现“ImportError:没有名为 oauth2client.client 的模块”?
Posted
技术标签:
【中文标题】如何防止 Google App Engine 上出现“ImportError:没有名为 oauth2client.client 的模块”?【英文标题】:How to prevent "ImportError: No module named oauth2client.client" on Google App Engine? 【发布时间】:2017-10-16 03:27:45 【问题描述】:我们收到一个错误:
ImportError: 没有名为 OAuth2Client 的模块
我们注意到有关此主题的大量问题,其中许多未得到解答,并且至少有一个答案描述了从 Google App Engine SDK 复制文件的解决方案。
然而,这种方法似乎很乏味,因为所有的依赖关系都不清楚。如果我们复制 oauth2client
然后运行,下一个错误是缺少另一个模块。修复它,然后另一个模块丢失,等等等等。
具有讽刺意味的是,我们可以看到所有需要的文件和模块,从 PyCharm 中的 Google App Engine SDK 中列出,但脚本似乎无法访问它们。
没有更好的方法来提取oauth2client
在 App Engine 上运行 Python 所需的所有文件吗?
【问题讨论】:
【参考方案1】:我遇到了这个问题并通过安装oauth2client
和pip3
解决了:
pip3 install --upgrade oauth2client
【讨论】:
感谢您的建议,我也遇到了导入错误。通过将以下内容放入命令提示符 pip install --upgrade oauth2client 解决了这个问题 不要使用 pip 的 --user 选项,否则会安装到错误的位置。特别是如果您计划部署应用程序。创建并激活一个虚拟环境,然后安装它并检查 (venv)/Lib/site-packages 下是否存在 oauth2client。【参考方案2】:按照google-api-python
documentation,试试这个
pip install --upgrade google-api-python-client oauth2client
【讨论】:
这似乎对我有用,在 Raspbian 8 上运行 Jeremy Blythe 的 Motion Uploader。 developers.google.com/api-client-library/python/guide/aaa_oauth 说:“oauth2client 库包含在 Python 的 Google APIs 客户端库中,这令人困惑。” ...【参考方案3】:答案是文件中的“供应商”。
我们根据此文档https://cloud.google.com/appengine/docs/python/tools/libraries27#vendoring 找到了解决此问题的快速方法 还有这个SO answer。
在 app.yaml 文件所在的文件夹中创建一个名为“lib”的新文件夹。 (您可以将其命名为其他名称。只需在下面使用该名称即可。)
在与您的 app.yaml 文件相同的文件夹中创建一个名为 appengine_config.py 的空文件
在 appengine_config.py 文件中添加两行:
from google.appengine.ext import vendor
vendor.add('lib')
从终端导航到包含该文件的目录并执行以下命令:
sudo pip install -t lib google-api-python-client
导入错误将消失,您也将拥有所有子依赖模块。
【讨论】:
【参考方案4】:安装WHL file
pip install oauth2client-4.1.3-py2.py3-none-any.whl
【讨论】:
【参考方案5】:运行这个
sudo python -m pip install oauth2client
【讨论】:
使用sudo pip
确实是个坏主意。你正在搞乱你的整个系统包管理器。请不要这样做。以上是关于如何防止 Google App Engine 上出现“ImportError:没有名为 oauth2client.client 的模块”?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以防止 Google App Engine 上的 DoSing?
使用安全约束时,防止 Google App Engine 记住非管理员用户的会话
PHP Google App Engine YAML 找不到目录
Google Storage 或 Amazon S3 或 Google App Engine BlobStore
Google App Engine + 基于 JSON 的服务 + 身份验证
如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?