4

我试图在我的Python 3.4应用程序中使用Google云端存储实现服务器到服务器的OAuth身份验证。所以,一般而言,此页Using OAuth 2.0 for Server to Server Applications使用Python 3.4的服务器到服务器应用程序的OAuth 2.0无法导入名称'SERVICE_ACCOUNT'

的描述,但同时我跑我的剧本有一个错误:

Traceback (most recent call last):
File "my_script.py", line 4, in from oauth2client.service_account import ServiceAccountCredentials
File "/usr/local/lib/python3.4/dist-packages/oauth2client/service_account.py", line 31, in from oauth2client.client import SERVICE_ACCOUNT

ImportError: cannot import name 'SERVICE_ACCOUNT'

所以,这里是我的代码:

from apiclient.discovery import build 
from oauth2client.service_account import ServiceAccountCredentials 
from httplib2 import Http 

scopes = ['https://www.googleapis.com/auth/cloud-platform.read-only'] 

credentials = ServiceAccountCredentials.from_json_keyfile_name('./keyfile.json', scopes) 

http_auth = credentials.authorize(Http()) 
service = build('storage', 'v1', http=http_auth) 

,如果您如此善良,以帮助我,这将是伟大的!这是我在Python语言中的第一个脚本之一,我是Python和Linux世界的新手,所以我可能会错过一些非常明显的东西。

如果它很重要,我的操作系统是Ubuntu 12.04。

谢谢!

+0

你需要显示其余的错误信息 – barny

+0

@ barny,哦,对不起,我的坏。我更新了问题中的错误文本,这就是我在运行脚本时获得的所有内容 –

+0

您是否尝试过搜索Google支持论坛https://groups.google.com/forum/#!forum/google-api- python-client – barny

回答

4

我发现google-api-python-client安装oauth2client版本1.5.2,但它实际上需要版本2.0.0。所以,你的pip install oauth2client --upgrade是你救了你。

+0

谢谢您的解释!它看起来像是这种行为的可能原因,但在你回答之后,我尝试卸载'oauth2client',然后运行'google-api-python-client'安装。之后,'pip show oauth2client'向我展示了一个'2.0.0'版本。有什么我不明白的吗? –

+0

这实际上是我需要安装pip才能使其工作的原因:'google-api-python-client == 1.5.0 oauth2client == 2.0.0.post1' – tobygriffin

+0

谢谢!我想我应该相信你的经历并接受你的回答。 –

1

好吧,它开始工作。对不起,我知道自我回答不是很好,但我花了2天的时间解决了这个问题。

所以,正如我之前提到的,我是一个Linux世界的新手。我认为,oauth2client重新安装帮助了我。我试图用pip install -Iv oauth2client==1.5.2将它降级到1.5.2版本,然后又一次失败,只跑了pip install oauth2client --upgrade

而且我换成apiclient LIB与googleapiclient,所以我的第一个字符串现在看起来像from googleapiclient.discovery import build

而现在它的工作,我甚至不知道为什么。

对不起,自己再回答。

+0

自我回答没有错。感谢您分享您的解决方案 – Richard

1

我有类似的问题,我得到cannot import name xxxx错误。事实证明,我在旧版本的oauth2client版本中在我的环境中有旧的* .pyc文件。即使我更新到最新的oauth2client版本,当我试图运行时,* .pyc文件也被使用了。我只是删除了oauth2client * .pyc文件,然后在没有任何问题的情况下重新执行我的程序。

相关问题