ImportError:没有名为apiclient.discovery的模块

时间:2013-08-16 07:10:57

标签: python google-app-engine google-api-python-client

我在 Google App Engine的Python 中使用Google Translate API时遇到此错误, 但我不知道如何解决,

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

我会尝试设置指向Google App Engine SDK的环境, 并再次上传到Google Apps Engine,始终收到错误

  

错误:服务器错误

     

服务器遇到错误,无法完成您的请求。   如果问题仍然存在,请报告您的问题并提及此错误消息以及导致该问题的查询。

请告诉我如何解决,

由于

更新:已修复 按照Nijjin的帮助, 我通过添加以下文件夹修复了问题

apiclient, gflags, httplib2, oauth2client, uritemplate

20 个答案:

答案 0 :(得分:203)

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

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

quick start page for python上描述了这一点。

答案 1 :(得分:98)

select Node_Name FROM events WHERE NOT EXISTS (SELECT 1 FROM events e WHERE e.Node_Name=events.Node_Name AND Status='Failed') GROUP BY Node_Name 是图书馆的原始名称 在某些时候,它被切换为apiclient

如果您的代码在Google App Engine上运行,则两者都可以正常运行。

如果您自己运行应用程序,并且安装了google-api-python-client,则两者都应该可以正常运行。

虽然,如果我们看一下the source code of the apiclient package's __init__.py module,我们可以看到googleapiclient模块只是为了向后兼容而保留。

  

保留apiclient作为googleapiclient的别名。

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

apiclient

答案 2 :(得分:10)

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

您需要将apiclient复制到项目目录&amp;你需要复制这些uritemplate&amp; httplib2也是。

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

答案 3 :(得分:6)

对于app引擎项目,您必须通过键入

在本地安装lib
pip install -t lib google-api-python-client

了解更多here

答案 4 :(得分:6)

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

执行命令

python --version

如果你得到像

这样的东西
Python 3.6.4 :: Anaconda, Inc.

然后尝试:

conda install google-api-python-client

正如bgoodr在评论中指出的那样,您可能需要指定渠道(思考存储库)来获取Google API库。在撰写本文时,这意味着运行命令:

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

https://anaconda.org/conda-forge/google-api-python-client

了解详情

答案 5 :(得分:5)

Google API Python客户端库的下载包含库及其所有依赖项,在项目的下载部分中命名为google-api-python-client-gae-<version>.zip。只需将其解压缩到您的App Engine项目中即可。

答案 6 :(得分:5)

确保您只安装了google-api-python-client。如果安装了apiclient,则会导致冲突。所以,运行以下内容:

sudo pip uninstall apiclient

答案 7 :(得分:4)

由于安装URITemplate模块时出现错误,我遇到了同样的问题。

这解决了这个问题:

pip install --force-reinstall uritemplate.py

答案 8 :(得分:4)

我通过以下方式重新安装包来解决问题:

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

答案 9 :(得分:2)

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

pip install uritemplate.py

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

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery

答案 10 :(得分:2)

对于python3来说,这对我有用:

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

答案 11 :(得分:2)

在处理项目以解析Google日历中的最近日历事件时,我遇到了同样的错误。

使用带有pip的标准安装对我来说不起作用,这是我为获取所需软件包而采取的措施。

直接转到源代码,这是 google-api-python-client 的链接,但如果您需要其他语言,则不应该有太大的不同。

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

点击绿色&#34;克隆或下载&#34;左上角附近的按钮并将其另存为zip文件。将zip移动到项目文件夹并将其解压缩到那里。然后将它创建的文件夹中的所有文件剪切回项目文件夹的根目录。

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

执行此标准后

from googleapiclient import discovery

效果很好。

希望这有帮助。

答案 12 :(得分:1)

我遇到了同样的问题。 这很有效:

>>> 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
>>> 

答案 13 :(得分:1)

即使遵循https://developers.google.com/drive/api/v3/quickstart/python的Google指南,我仍然遇到相同的错误,然后我意识到我必须像这样调用:

import random
import string

def psswd_gen():
    allto = string.ascii_letters + string.digits

    paswlen = int(input("Hello, this is the password generator, how long would you like your password to be? "))
    while paswlen < 6:
        paswlen = int(input("Please enter a number greater than 6 "))
    passwd = random.choices(allto, k=paswlen)

    return "".join(passwd)
nw = psswd_gen()
print(nw)

代替:

python3 quickstart.py

(请注意“ python quickstart.py <-- WRONG ”)

完美地工作。

我正在使用3

答案 14 :(得分:0)

(2021 年 5 月)自最初提出问题以来已经过去了大约 8 年,从那时起,产品发生了几次变化,因此新开发人员来到这里希望在 Python App Engine 上使用 Google Translate API需要做一些更改:

  1. 产品信息/成本:Google Translate API 现在作为 Google Cloud Translation API 提供。它不是免费的(意味着您需要创建一个由信用卡等金融工具支持的计费帐户),但您每月可以获得翻译字符的配额。有关详细信息,请参阅 its pricing page。同样,虽然您过去可以在没有信用卡的情况下创建 App Engine 应用程序,但现在不能通过 new policy as of Nov 2019 来实现。它仍然有一个慷慨的 "Always Free" tier quota,您必须超过它才能产生费用。另请参阅 App Engine pricing page 了解更多信息。

  2. 客户端库:而不是使用 apiclientgoogleapiclient,它们是 Google APIs client library 的一部分,Google Cloud client libraries 是一种低级、多产品,平台级客户端库,我们推荐basic/v2/Python 2,它是更高级别和产品-focused。这意味着有一个特定的 Cloud Translation 客户端库(实际上是两个:advanced/v3/Python 3default service account)——这些是更高级别且更易于使用的:

  • 添加客户端库: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)

它也适用于 Python 2 和 3,无需任何修改:

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

此代码段可以很容易地适用于 App Engine(更多内容见下文),尤其是在您进行原型设计时,因为您可以利用 this page in the docs,因此您不必为服务帐户而烦恼,比如创建一个新的、创建公钥/私钥对、必须下载 JSON 凭据文件并将 GOOGLE_APPLICATION_CREDENTIALS 环境变量指向它等。当您准备好投入生产并需要创建您自己的服务帐户,然后查看 Cloud Datastore

此外,App Engine 本身也发生了重大变化:最初的 Python 2 App Engine 服务有一堆内置的专有 API(Datastore、Memcache、Task Queues 等)。由于用户对“供应商锁定”的反馈,下一代 Python 3 App Engine 服务旨在将开发人员从这些服务中解放出来。相反,您可以利用任何等效的产品化服务,即 Cloud MemorystoreCloud Tasksmigration guide。 Google Cloud 团队创建了一个 hands-on tutorials, code samples, and videos,我在该指南中添加了 Google Cloud serverless compute platforms,以帮助人们在您将应用移植到 Python 3 时迁移到这些非捆绑服务。

如果您正在考虑Cloud Functions 超越 App Engine,例如 Cloud Run (FaaS) 或 this Translation API sample app I created(容器化/托管 CaaS),请查看this(我基本上是从那里窃取了上面的代码片段)可以通过 8 种不同的方式部署,Python 2 和 3,使用 Flask 的开发服务器在本地部署到 App Engine、Cloud Functions 或 Cloud Run,所有这些都只需要很小的一部分配置更改。它旨在展示我们平台的灵活性,并帮助用户更好地了解它们之间的差异。

答案 15 :(得分:0)

我使用 pip 安装了 google-api-python-client,但它仍然显示错误,所以我尝试升级它并帮助我摆脱错误

如果您使用的是“windows”,那么

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

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

如果创建Python模块并通过pippipx命令安装脚本后执行脚本,则会看到相同的错误。 在这种情况下,请确保已声明最低项目需要正确运行到install_requires文件的setup.py部分中,因此在这种情况下:

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

答案 18 :(得分:0)

使用此

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

答案 19 :(得分:0)

当我使用sudo时,它只对我有用:

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