我在 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
答案 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)
答案 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
了解详情
答案 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需要做一些更改:
产品信息/成本: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 了解更多信息。
客户端库:而不是使用 apiclient
或 googleapiclient
,它们是 Google APIs client library 的一部分,Google Cloud client libraries 是一种低级、多产品,平台级客户端库,我们推荐basic/v2/Python 2,它是更高级别和产品-focused。这意味着有一个特定的 Cloud Translation 客户端库(实际上是两个:advanced/v3/Python 3 或 default 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 Memorystore、Cloud Tasks 和 migration 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模块并通过pip
或pipx
命令安装脚本后执行脚本,则会看到相同的错误。
在这种情况下,请确保已声明最低项目需要正确运行到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