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


153

我在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答案等...


您是否apiclient在appengine项目中包含了代码目录?
Nijin Narayanan

您是指外部图书馆吗?(是/ Google App Engine SDK / google-api-python-client / apiclient / discovery.py)?我使用IDEA IntelliJ。感谢您提供更多信息
伊大厦2013年

确保您未将程序作为sudo运行,因为pip在您的用户主目录中安装了lib,那么root用户没有这些库pip show PyDrive
deFreitas

cloud.google.com/sdk/docs可以帮助的过程

这是我打的第一页,但最初我从Nijin和Varun错过了以下答案。您需要按照链接中的说明将模块作为“第三方程序包”包含在应用程序工作目录中。在Linux Ubuntu上,当使用-t开关安装到lib /时,我还必须使用sudo。
炼金术

Answers:


240

您可以通过以下简单安装获得这些依赖项:

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

python快速入门页面上对此进行了描述。


7
这样做之后,我遇到了相同的错误。好吧,我用C:\>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
Edmund Sulzanok

5
答案中提供的链接已移至Google的Python入门
Nathan

4
我不知道,为什么上面的命令sudo对我没有用。
mtk

5
对于Python 3,需要在上述命令中将pip替换为pip3。对于我相信的某些人来说,这可能并不明显。
Emmet B

1
使用Debian 9 Stretch我使用了命令sudo apt-get install python-googleapi python-oauth2client和命令sudo apt-get install python3-googleapi python3-oauth2client。它工作完美,我更喜欢这种方式,因为我有足够的一位软件包管理器。
Gerard

120

apiclient是图书馆的原始名称。
在某个时候,它已切换为googleapiclient

如果您的代码在Google App Engine上运行,则两者均应正常工作。

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

虽然,如果我们看一下软件包模块的源代码apiclient__init__.py,我们可以看到该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无关。
内森·威尔斯

10

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

你需要复制apiclient到你的项目目录和你需要复制这些uritemplatehttplib2过。

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


1
我使用了Google Translate API的Python,因此,我需要:apiclient,gflags,httplib2,oauth2client和uritemplate。谢谢:D
休塔

Jorvis的回复与未运行应用程序的人更相关。如果我错了,请纠正我。
2014年

apiclient不包含在默认库中真的是真的吗?我们可以将apiclient视为在PyCharm的Google App Engine SDK目录中列出的目录。就是说,即使我们在那里看到它,我们仍然会在他的问题中发现错误。
Praxiteles'5

8

如果上述解决方案都不适合您,请考虑您是否已通过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上查看更多


2
实际上,显然需要一个频道。请参阅anaconda.org/conda-forge/google-api-python-client (请参阅-c选项)。
bgoodr

2
谢谢@bgoodr。我已将您的评论纳入答案。
乔纳森·汉森

7

确保只google-api-python-client安装了。如果已apiclient安装,将导致碰撞。因此,运行以下命令:

sudo pip uninstall apiclient



5

我通过以下方法重新安装了软件包,从而解决了该问题:

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

5

对于python3这对我有用:

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

4

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

这样就解决了问题:

pip install --force-reinstall uritemplate.py

3

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

使用pip进行标准安装对我不起作用,这是我获取所需软件包时所做的事情。

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

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

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

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

完成此标准后

from googleapiclient import discovery

效果很好。

希望这可以帮助。


2

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

pip install uritemplate.py

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

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery

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

1

它仅在我使用sudo时与我一起使用:

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


0

用这个

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.