如何防止 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】:

我遇到了这个问题并通过安装oauth2clientpip3 解决了:

pip3 install --upgrade oauth2client 

【讨论】:

感谢您的建议,我也遇到了导入错误。通过将以下内容放入命令提示符 pip install --upgrade oauth2client 解决了这个问题 不要使用 pip 的 --user 选项,否则会安装到错误的位置。特别是如果您计划部署应用程序。创建并激活一个虚拟环境,然后安装它并检查 (venv)/Lib/site-packages 下是否存在 oauth2client。【参考方案2】:

按照google-api-pythondocumentation,试试这个

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 收听消息?