【问题标题】:OAuth 2.0 for Server to Server Applications using Python 3.4, cannot import name 'SERVICE_ACCOUNT'使用 Python 3.4 的服务器到服务器应用程序的 OAuth 2.0,无法导入名称“SERVICE_ACCOUNT”
【发布时间】:2016-06-12 09:23:32
【问题描述】:

我正在尝试在我的 Python 3.4 应用程序中实现“服务器到服务器”OAuth 身份验证,以便与 Google 云存储一起使用。所以,一般来说它在这个页面上描述Using OAuth 2.0 for Server to Server Applications

但是在我运行脚本时出现错误:

回溯(最近一次通话最后一次):
文件“my_script.py”,第 4 行,在 从 oauth2client.service_account 导入 ServiceAccountCredentials
文件 "/usr/local/lib/python3.4/dist-packages/oauth2client/service_account.py", 第 31 行,在 从 oauth2client.client 导入 SERVICE_ACCOUNT

ImportError:无法导入名称“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。

谢谢!

【问题讨论】:

  • 你需要显示其余的错误信息
  • @barny,哦,对不起,我的错。我已经更新了问题中的错误文本,这就是我在运行脚本时得到的全部内容
  • @barny,是的,我试图在那里找到类似的东西,但没有找到任何对我有帮助的东西。但也许你是对的,我应该在那里问

标签: python oauth google-api ubuntu-12.04 google-api-python-client


【解决方案1】:

嗯,不知何故,它开始起作用了。抱歉,我知道自我回答不是很好,但我花了 2 天时间解决这个问题。

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

我还用googleapiclient 替换了apiclient lib,所以我的第一个字符串现在看起来像from googleapiclient.discovery import build

现在它正在工作,我什至不知道为什么。

抱歉再次自我回答。

【讨论】:

  • 自我回答没有错。感谢您分享您的解决方案
【解决方案2】:

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

【讨论】:

  • 感谢您的解释!看起来确实是这种行为的一个可能原因,但是在您回答之后,我尝试卸载oauth2client,然后运行google-api-python-client 安装。然后,pip show oauth2client 向我展示了一个“2.0.0”版本。有什么我不明白的吗?
  • 这实际上是我需要安装 pip 才能使其工作:google-api-python-client==1.5.0 oauth2client==2.0.0.post1
  • 谢谢!我想我应该相信你的经验并接受你的回答。
【解决方案3】:

我遇到了类似的问题,我收到了cannot import name xxxx 错误。原来我的环境中有旧的 oauth2client 版本的旧 *.pyc 文件。即使我更新到最新的 oauth2client 版本,当我尝试运行时,*.pyc 文件也会被使用。我只是删除了 oauth2client *.pyc 文件,然后重新运行我的程序,没有任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2013-08-26
    相关资源
    最近更新 更多