为什么我的使用 Translate API 的 Python App Engine 应用程序会出现一个“ Import Error: No module name apiclient.Discovery”错误?

我得到这个错误在 Google App Engine 的 Python已经使用谷歌翻译 API, 但我不知道该怎么补救,

<module>
from apiclient.discovery import build
ImportError: No module named apiclient.discovery

我试试 向 Google App Engine SDK 指示的 set 环境, 然后再次上传到 Google Apps Engine,总是出错,

服务器错误

服务器遇到错误,无法完成您的请求。 如果问题仍然存在,请报告您的问题,并提到这个错误消息和查询,造成它。

请告诉我该怎么做,

谢谢

更新: 修正 在 Nijjin 的帮助下, 我通过添加以下文件夹解决了问题,

apiclient, gflags, httplib2, oauth2client, uritemplate

如果您仍然有问题,请考虑下面的答案这个页面,以获得更多的信息。前男友。翻译: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对: 校对:。

228852 次浏览

apiclient不在 appengine 运行时提供的第三方库列表中: http://developers.google.com/appengine/docs/python/tools/libraries27

你需要复制 apiclient到你的项目目录 & 你需要复制这些 uritemplate & httplib2

注意: 文档列表中没有提供的任何第三方库都必须复制到 appengine 项目目录

Google API Python Client 库有一个下载,其中包含该库及其所有依赖项,在项目的下载部分中命名为类似于 Google-api-python-client-ga-< version > . zip的内容。只需将其解压缩到 AppEngine 项目中。

您应该能够通过这个简单的安装获得这些依赖项:

sudo pip install --upgrade google-api-python-client

这是在 Python 快速启动页面上描述的。

apiclient是库的原始名称。
在某种程度上,它被转换为 googleapiclient

如果您的代码在 GoogleAppEngine 上运行,两者都应该可以工作。

如果您自己运行应用程序,并且安装了 Google-api-python-client,那么两者都可以工作。

尽管如此,如果我们看一下 ABC0包的 __init__.py模块的源代码,我们可以看到 apiclient模块只是为了向后兼容而保留。

保留客户作为 Googleapiclient 的化名。

因此,您确实应该在代码中使用 googleapiclient,因为 apiclient别名只是为了不破坏遗留代码而维护的。

# bad
from apiclient.discovery import build


# good
from googleapiclient.discovery import build

由于 URITemplate 模块安装中的一个 bug,我遇到了同样的问题。

这解决了问题:

pip install --force-reinstall uritemplate.py

确保只安装了 google-api-python-client。如果您安装了 apiclient,它将导致冲突。那么,运行以下命令:

sudo pip uninstall apiclient

我通过以下方式重新安装软件包解决了这个问题:

pip install --force-reinstall google-api-python-client

对于应用程序引擎项目,您必须通过输入

pip install -t lib google-api-python-client

阅读更多 给你

“ google-api-python-client”要求:

pip install uritemplate.py

修复 GAE 开发服务器上的问题:

from googleapiclient.discovery import build


ImportError: No module named googleapiclient.discovery

我也遇到了同样的问题。 这个方法奏效了:

>>> import pkg_resources
>>> pkg_resources.require("google-api-python-client")
[google-api-python-client 1.5.3 (c:\python27), uritemplate 0.6 (c:\python27\lib\site-packages\uritemplate-0.6-py2.7.egg), six 1.10.0 (c:\python27\lib\site-packages\six-1.10.0-py2.7.egg), oauth2client 3.0.0 (c:\python27\lib\site-packages\oauth2client-3.0.0-py2.7.egg), httplib2 0.9.2 (c:\python27\lib\site-packages\httplib2-0.9.2-py2.7.egg), simplejson 3.8.2 (c:\python27\lib\site-packages\simplejson-3.8.2-py2.7-win32.egg), six 1.10.0 (c:\python27\lib\site-packages\six-1.10.0-py2.7.egg), rsa 3.4.2 (c:\python27\lib\site-packages\rsa-3.4.2-py2.7.egg), pyasn1-modules 0.0.8 (c:\python27\lib\site-packages\pyasn1_modules-0.0.8-py2.7.egg), pyasn1 0.1.9 (c:\python27\lib\site-packages\pyasn1-0.1.9-py2.7.egg)]


>>> from apiclient.discovery import build
>>>

只有在我使用 sudo 的时候,它才起作用:

sudo pip install --upgrade google-api-python-client

当我在一个项目中解析来自 Google 日历的最新日历事件时,也出现了同样的错误。

使用带 pip 的标准安装对我来说不起作用,下面是我为获得所需的软件包所做的工作。

直接去源代码,这里有一个 Google-api-python-client的链接,但是如果你需要一个不同的语言,它不应该太不同。

Https://github.com/google/google-api-python-client

点击左上角的绿色“克隆或下载”按钮,将其保存为 zip 文件。将压缩文件移动到您的项目文件夹并在那里解压缩它。然后将它创建的文件夹中的所有文件切回到项目文件夹的根目录中。

是的,这确实会使您的工作空间变得混乱,但是许多编译器都有隐藏文件的方法。

这样做之后,标准

from googleapiclient import discovery

效果很好。

希望这个能帮上忙。

如果以上所有解决方案都不适合您,请考虑是否通过 Anaconda 安装了 python。如果是这种情况,那么使用 conda 安装 GoogleAPI 库可能会修复它。

跑步:

python --version

如果你得到

Python 3.6.4 :: Anaconda, Inc.

然后尝试:

conda install google-api-python-client

正如 bgoodr 在一条评论中指出的,您可能需要指定通道(考虑存储库)来获取 GoogleAPI 库。在编写本文时,这意味着运行命令:

conda install -c conda-forge google-api-python-client

详情请看 https://anaconda.org/conda-forge/google-api-python-client

对于 python3,这对我很有效:

sudo pip3 install --upgrade google-api-python-client

用这个

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

我得到了同样的错误,甚至在按照谷歌的指南在 https://developers.google.com/drive/api/v3/quickstart/python,然后我意识到我必须这样调用:

python3 quickstart.py

而不是:

python quickstart.py <-- WRONG

(请注意「 3」)

完美无瑕。

我用的是 Ubuntu 18.04.4 LTS

如果您正在创建一个 Python 模块,并且在通过 pippipx命令安装该脚本之后执行该脚本,则可以看到同样的错误。 在这种情况下,确保您已经声明了需要在 setup.py文件的 install_requires部分正确运行的项目 最低限度,因此在这种情况下:

install_requires=[
"google-api-python-client>=1.12.3",
"google-auth-httplib2>=0.0.4",
"google-auth-oauthlib>=0.4.1"
]

如果 IDE 上的解释器指向错误的虚拟环境,也会发生这种情况。在 VSCODE,我手动将它设置为正确的解释器,我的问题就解决了。

我安装 google-api-python-client使用 Pip,但它仍然显示我的错误,所以我尝试升级它,它帮助我走出错误

如果你使用「 窗户

pip install --upgrade google-api-python-client

会帮助你,因为它帮助我,所以它也会帮助你:)

(2021年5月)从最初的问题到现在已经8年了,从那时起,一些产品发生了变化,所以新的开发者来到这里希望在 Python App Engine 上使用 Google Translate API,他们需要做一些改变:

  1. 产品信息/成本 : Google Translate API 现在作为 谷歌云翻译 API提供。它不是免费的(意味着您需要创建一个由金融工具(比如信用卡)支持的账单帐户) ,但是您每月可以获得一定数量的翻译字符。有关更多信息,请参见 它的定价页面。类似地,虽然您过去可以创建一个应用程序引擎应用程序 没有信用卡,您不能再这样做通过 自2019年11月起实施新政策。它仍然有一个慷慨的 “永远免费”级别配额,你必须超过,以招致费用。更多信息请参见 App Engine 价格页面

  2. 客户端库 : 与使用 apiclientgoogleapiclient不同,它们是 GoogleAPI 客户端库的一部分,GoogleAPI 客户端库是一个低级的、多产品的、 平台级的客户端库,我们推荐使用高级的、以 产品为重点的 Google Cloud 客户端库。这意味着有一个特定的云翻译客户端库(实际上是两个: Basic/v2/Python 2Advanced/v3/Python 3)ーー这些都是更高级的,更容易使用:

  • 添加客户机库: pip install -U pip google-cloud-translate(或 pip3)
  • 使用它,您的代码示例可以非常简单:
'translate_demo.py - demo the Cloud Translation API'
from __future__ import print_function
import google.auth
from google.cloud import translate


TRANSLATE = translate.TranslationServiceClient()
_, PROJECT_ID = google.auth.default()
PARENT = 'projects/{}'.format(PROJECT_ID)
TARGET_LANG = 'es'
TEXT = 'Hello world'
DATA = {
'parent': PARENT,
'contents': [TEXT],
'target_language_code': TARGET_LANG,
}
try:                # Python 3/advanced/v3
rsp = TRANSLATE.translate_text(request=DATA)
except TypeError:   # Python 2/basic/v2
rsp = TRANSLATE.translate_text(**DATA)
print(TEXT, '=', rsp.translations[0].translated_text)

它也可以在 Python2和3上运行,不需要任何修改:

$ python2 translate_demo.py
Hello world = Hola Mundo
$ python3 translate_demo.py
Hello world = Hola Mundo

这个代码片段可以很容易地适用于 App Engine (更多见下文) ,特别是当你正在开发原型的时候,因为你可以利用 默认服务帐户,所以你不需要在服务帐户上浪费时间,比如创建一个新的、创建一个公共/私有密钥对、下载 JSON 凭证文件并将 GOOGLE_APPLICATION_CREDENTIALS环境变量指向它等等。当您准备投入生产并需要创建自己的服务帐户时,请查看 文件中的这一页

此外,App Engine 本身也发生了重大变化: 最初的 Python 2 App Engine 服务有一系列内置的专用 API (Datastore、 Memcache、 Task Queues 等)。由于用户对“供应商锁定”的反馈,下一代 Python 3 App Engine 服务将开发人员从这些服务中解放出来。相反,您可以利用任何等效的产品化服务,即 云数据存储云存储器云计算任务。Google Cloud 团队已经创建了一个 迁徙指南,我已经用 实践教程、代码示例和视频扩展了该指南,以帮助人们在将应用移植到 Python 3时迁移到这些非绑定服务。

如果你正在考虑 Google Cloud 无服务器计算平台 超越应用引擎,比如 云端功能(FaaS)或 云跑(容器化/管理的 CaaS) ,那么检查一下 我创建的这个翻译 API 示例应用程序(我基本上是从那里窃取了上面的代码片段) ,它可以以8种不同的方式部署,Python 2和3,在 Flask 的开发服务器本地部署,到应用引擎,云功能,或者云运行,所有这些只需要小的配置变化。它旨在展示我们平台的灵活性,以及帮助用户更好地理解他们之间的差异。