【问题标题】:Why is my Python App Engine app using the Translate API getting an error of ImportError: No module named apiclient.discovery?为什么我使用 Translate API 的 Python App Engine 应用程序收到 ImportError 错误:没有名为 apiclient.discovery 的模块?
【发布时间】:2013-08-18 12:45:28
【问题描述】:

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

如果您仍然有问题,请考虑以下此页面的答案以获取更多信息。前任。 : Varum 答案等...

【问题讨论】:

  • 您的 appengine 项目中是否包含 apiclient 代码目录?
  • 您是指外部库吗? (它是 /Google App Engine SDK/google-api-python-client/apiclient/discovery.py)?我使用 IDEA IntelliJ。感谢您提供更多信息
  • 确保你没有以 sudo 运行你的程序,因为 pip install libs 在你的用户家,然后 root 用户没有这些库pip show PyDrive
  • cloud.google.com/sdk/docs 可能对这个过程有所帮助
  • 这是我打开的第一页,但我最初错过了 Nijin 和 Varun 的以下答案。您需要按照链接中的说明将模块作为“第三方包”包含在应用程序工作目录中。在 Linux Ubuntu 上,当使用 -t 开关安装到 lib/ 时,我还必须使用 sudo。

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


【解决方案1】:

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

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

quick start page for python 对此进行了描述。

【讨论】:

  • 这样做后我遇到了同样的错误。好吧,我用C:\&gt;C:\Python27\Scripts\easy_install-script.py --upgrade google-api-python-client 安装了它,上面写着Installed c:\python27\lib\site-packages\google_api_python_client-1.3.1-py2.7.egg 并尝试再次安装google-api-python-client 1.3.1 is already the active version in easy-install.pth
  • 答案中提供的链接移至Googles Getting Started with Python
  • 我不知道,为什么上面没有sudo 的命令对我有用。
  • 对于 Python 3,需要将上述命令中的 pip 替换为 pip3。对于我认为的某些人来说,这可能并不明显。
  • 使用 Debian 9 Stretch 我使用了命令 sudo apt-get install python-googleapi python-oauth2client 和命令 sudo apt-get install python3-googleapi python3-oauth2client。它工作得很好,我更喜欢这种方式,因为我有一个包管理器就足够了。
【解决方案2】:

apiclient 是库的原始名称。
在某个时候,它被切换为googleapiclient

如果您的代码在 Google App Engine 上运行,那么两者都应该可以工作。

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

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

保留 apiclient 作为 googleapiclient 的别名。

所以,你真的应该在你的代码中使用googleapiclient,因为apiclient 别名只是为了不破坏遗留代码而维护的。

# bad
from apiclient.discovery import build

# good
from googleapiclient.discovery import build

【讨论】:

  • 更多信息:我刚遇到这个问题(Python 3.5.2),在import 语句中更改名称修复了它。我已经将 Google 的示例代码移动到 PyCharm 中的一个文件中,当 PyCharm 提示我安装一个名为 apiclient 的包时,我这样做了。当我实际查看它已安装的模块时,它很小,似乎与 Google 无关。
  • 这是我的解决方案。一段时间以来一直在 python 2 中使用 apiclient,刚刚在 Pycharm 中创建了一个新项目(所有新项目都迁移到 Python3),并且简单地从 apliclient 更改为 googleapliclient(确保已安装)修复并允许我的基本模板框架用于报告带着向前。谢谢。
【解决方案3】:

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

您需要将apiclient 复制到您的项目目录中,并且您还需要复制这些uritemplatehttplib2

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

【讨论】:

  • 我使用了 Google Translate API 的 Python,因此,我需要:apiclient、gflags、httplib2、oauth2client、uritemplate。谢谢:D
  • Jorvis 的回复更适合那些没有运行应用程序的人。如果我错了,请纠正我。
  • 默认库中不包含 apiclient 真的是这样吗?我们可以将 apiclient 视为在 PyCharm 的 Google App Engine SDK 目录中列出的目录。也就是说,即使我们在那里看到它,我们仍然在他的问题中得到错误。
【解决方案4】:

如果上述解决方案都不适合您,请考虑您是否可能通过 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】:

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

sudo pip uninstall apiclient

【讨论】:

    【解决方案6】:

    对于应用引擎项目,您必须通过键入在本地安装库

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

    阅读更多here

    【讨论】:

    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

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

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

      【讨论】:

        【解决方案9】:

        对于 python3 这对我有用:

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

        【讨论】:

          【解决方案10】:

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

          这解决了问题:

          pip install --force-reinstall uritemplate.py
          

          【讨论】:

            【解决方案11】:

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

            使用带有 pip 的标准安装对我不起作用,这是我为获取所需软件包所做的工作。

            直接访问源代码,这里是 google-api-python-client 的链接,但如果您需要不同的语言,它应该不会相差太大。

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

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

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

            做完这个标准

            from googleapiclient import discovery
            

            效果很好。

            希望这会有所帮助。

            【讨论】:

              【解决方案12】:

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

              pip install uritemplate.py
              

              解决 GAE 开发服务器上的问题:

              from googleapiclient.discovery import build
              
              ImportError: No module named googleapiclient.discovery
              

              【讨论】:

                【解决方案13】:

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

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

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

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

                【讨论】:

                  【解决方案14】:

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

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

                  【讨论】:

                    【解决方案15】:

                    仅当我使用 sudo 时它才对我有效:

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

                    【讨论】:

                      【解决方案16】:

                      即使按照https://developers.google.com/drive/api/v3/quickstart/python 上的 Google 指南进行操作,我也遇到了同样的错误,然后我意识到我必须像这样调用:

                      python3 quickstart.py
                      

                      代替:

                      python quickstart.py <-- WRONG
                      

                      (注意“3”)

                      完美运行。

                      我正在使用Ubuntu 18.04.4 LTS

                      【讨论】:

                        【解决方案17】:

                        使用这个

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

                        【讨论】:

                          【解决方案18】:

                          如果您正在创建 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"
                          ]
                          

                          【讨论】:

                            【解决方案19】:

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

                            【讨论】:

                            • 同一个错误可能由多个不同的问题引起。保留其他答案(例如这个答案)很有用,可以帮助其他人在未来解决这个问题的变体。
                            【解决方案20】:

                            (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 APIs client library 是一个低级、多产品的平台 -level 客户端库,我们推荐Google Cloud client libraries,它是更高级别的并且以产品为中心。这意味着有一个特定的 Cloud Translation 客户端库(实际上是两个: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)
                            

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

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

                            这段代码 sn-p 可以很容易地适应 App Engine(更多内容见下文),尤其是在您进行原型设计时,因为您可以利用 default service account,这样您就不必乱用服务帐户了,比如创建一个新的,创建一个公钥/私钥对,并且必须下载 JSON 凭证文件并将GOOGLE_APPLICATION_CREDENTIALS 环境变量指向它等等。当你准备好投入生产并需要创建你的自己的服务帐号,然后查看this page in the docs

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

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

                            【讨论】:

                              猜你喜欢
                              • 2017-10-05
                              • 1970-01-01
                              • 2016-03-05
                              • 2015-06-17
                              • 1970-01-01
                              • 2015-01-25
                              • 2016-09-03
                              • 2018-03-26
                              • 2019-05-24
                              相关资源
                              最近更新 更多