我正在尝试在我的Python 3.4应用程序中实施“服务器到服务器”OAuth身份验证,以便与Google云端存储配合使用。因此,一般情况下,本页Using OAuth 2.0 for Server to Server Applications
对此进行了描述但是在我运行脚本时出现错误:
追踪(最近的呼叫最后):
文件“my_script.py”,第4行,in 来自oauth2client.service_account导入ServiceAccountCredentials
文件 “/usr/local/lib/python3.4/dist-packages/oauth2client/service_account.py” 第31行,在 来自oauth2client.client导入SERVICE_ACCOUNTImportError:无法导入名称“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 :(得分:6)
我发现google-api-python-client
安装了oauth2client
版本1.5.2,但它实际上需要2.0.0版本。所以,你的pip install oauth2client --upgrade
就是拯救你的。
答案 1 :(得分:1)
嗯,不知怎的,它开始起作用了。对不起,我知道自我回答不是很好,但我花了两天时间解决这个问题。
所以,正如我之前提到的,我是Linux世界的新手。我想,oauth2client
重新安装帮助了我。我尝试使用pip install -Iv oauth2client==1.5.2
将其降级到1.5.2版本,然后在另一个失败之后运行pip install oauth2client --upgrade
。
此外,我将apiclient
lib替换为googleapiclient
,因此我的第一个字符串现在看起来像from googleapiclient.discovery import build
现在它正在发挥作用,我甚至不知道为什么。
很抱歉再次自我回答。
答案 2 :(得分:1)
我遇到了cannot import name xxxx
错误的类似问题。事实证明,我的环境中有旧的* .pyc文件来自较旧的oauth2client版本。即使我更新到最新的oauth2client版本,* .pyc文件在我尝试运行时也被使用了。我只是删除了oauth2client * .pyc文件,然后重新启动我的程序没有任何问题。