Python Google API quickstart.py error key错误:'_模块';

Python Google API quickstart.py error key错误:'_模块';,python,google-api,gmail-api,Python,Google Api,Gmail Api,使用Gmail API。我的客户机机密文件已下载并为Ruby工作。当我尝试quickstart.py(python)版本时,我遇到了这个错误 File "quickstart.py", line 70, in <module> main() File "quickstart.py", line 55, in main credentials = get_credentials() File "quickstart.py", line 38, in get_cr

使用Gmail API。我的客户机机密文件已下载并为Ruby工作。当我尝试quickstart.py(python)版本时,我遇到了这个错误

File "quickstart.py", line 70, in <module>
    main()
  File "quickstart.py", line 55, in main
    credentials = get_credentials()
  File "quickstart.py", line 38, in get_credentials
    credentials = store.get()
  File "/Library/Python/2.7/site-packages/oauth2client/client.py", line 374, in get
    return self.locked_get()
  File "/Library/Python/2.7/site-packages/oauth2client/file.py", line 79, in locked_get
    credentials = Credentials.new_from_json(content)
  File "/Library/Python/2.7/site-packages/oauth2client/client.py", line 281, in new_from_json
    module = data['_module']
KeyError: '_module'
文件“quickstart.py”,第70行,在
main()
文件“quickstart.py”,第55行,主
凭证=获取凭证()
get_凭证中第38行的文件“quickstart.py”
凭据=store.get()
get中第374行的文件“/Library/Python/2.7/site packages/oauth2client/client.py”
返回self.locked_get()
文件“/Library/Python/2.7/site packages/oauth2client/File.py”,第79行,在locked_get中
credentials=凭据。从\u json(内容)中新建\u
文件“/Library/Python/2.7/site packages/oauth2client/client.py”,第281行,以新的形式,从_json开始
模块=数据[''模块']
KeyError:“\u模块”

我根本没有更改该文件,只是将client_secret.json添加到该工作目录中,并安装了GoogleAPI python客户端。我的python代码来自这里:

oauth2client试图从结构不正确的json文件加载凭据

也许Ruby客户端使用不同的文件格式,但我会感到惊讶。你确定你没有意外地将
client\u secret.json
保存为
~/.credentials/gmail quickstart.json


无论如何,删除
~/.credentials/gmail quickstart.json
并重新身份验证将生成一个具有正确结构的新凭据文件。

我自己也在学习Python,遇到了类似的问题,但使用了。事实证明,这是一个关于范围的打字错误

## Typo - Invalid definition
SCOPES = 'https://ww.googleapies.com/auth/calendar.readonly'
## Correct Value for SCOPE
SCOPES = 'https://www.googleapis.com/auth/calendar'
此外,马特的回答也为我指明了正确的方向。gmail-quickstart.json与client_secret.json不同。client_secret.json允许您请求OAuth2令牌。而gmail-quickstart.json包含发布的令牌和与之相关的元数据。gmail-quickstart.json只有在您成功登录后才会创建

最后一个想法是,为了成功登录,quickstart.py应用程序启动了我的web浏览器(Firefox)的一个实例,并进入Google登录屏幕。为了让Firefox正常运行,我必须首先正确设置显示变量

$ export DISPLAY=:0
$ xhost +
access control disabled, clients can connect from any host

我通过将client_secret.json移动到与试图读取它的py文件(quickstart.py)相同的目录来解决这个问题,我的在桌面上,而我已经将json保存到了文档中。我也把json保存到桌面上了,天哪,它飞了


我不知道为什么当它们位于不同的目录中时它不起作用,定义自定义凭据路径没有帮助。

尝试暂时将
creds=store.get()
替换为
creds=None
。如果这样做有效,您可以重构代码,以始终从基于流的凭据实例化开始。这对我有用。Google示例似乎与其oauth2client不同步。

我遵循了下面列出的几个建议:

  • 按照simic0de的建议,将client_secret.json移动到与试图读取它的py文件相同的目录中

  • 使用Skill idea,我决定处理异常,而不是完全消除“credentials=store.get()”,因此它可以用于基于流的凭据实例化

最后的代码是:

try:
    credentials = store.get()
except:
    print('Working with flow-based credentials instantiation')
您可以在except行中编写自己的代码。这种方法将允许store.get()命令在满足条件时工作。

在这个GitHub问题中:

2016年1月10日回复:

如果有人有相同的问题:
auth_token.txt
client_secret.json
不一样!不要从谷歌API控制台链接
客户端\u secret.json
。该文件将由脚本自动创建

错误方式:
gauth.SaveCredentialsFile(“client\u secret.json”)

正确的方式:
gauth.SaveCredentialsFile(“.json”)

额外:

PyDrive代码,用于自动执行google drive api验证。只需使用浏览器一次即可进行身份验证,以后不再使用。它将您的凭证数据保存在
mycreds.json
:)

从pydrive.auth导入GoogleAuth
从pydrive.drive导入GoogleDrive
gauth=GoogleAuth()
LoadCredentialsFile(“mycreds.json”)
如果gauth.credentials为无:
gauth.LocalWebserverAuth()
elif gauth.access\u令牌\u已过期:
高思
其他:
gouth.授权
SaveCredentialsFile(“mycreds.json”)

有适合您的解决方案吗?我对
键错误有相同的问题:“\u module”
显然是因为存储了无效的OAuth2凭据(即ServiceAccounts)。在使用单独的分支进行本地测试并与生产合并时发生。如果有帮助的话。有帮助的解释+1我刚刚使用了Google给我的确切结构,文件仍然不会被接受-还有什么建议吗?重新验证,它会给你一个“client_secrets.json”,会使“credentials.json”中的数据无效;您必须在运行任何操作之前删除它。如果您有一个“settings.yaml”文件,则需要更新“client\u config:”数据以对应于新的“client\u id”和“client\u secret”。