Gspread 无法与 Google Colab“验证用户”和 Oauth2Client 配合使用

问题描述 投票:0回答:3

在 Google Colab 中,使用下面的示例时,我现在收到错误。这工作了很多年,今天对我来说不再工作了。

使用示例时:

单元1

from google.colab import auth
auth.authenticate_user()

细胞2

import gspread
from oauth2client.client import GoogleCredentials

gc = gspread.authorize(GoogleCredentials.get_application_default())`

错误:


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-ac9436b5eeee> in <module>()
      2 from oauth2client.client import GoogleCredentials
      3 
----> 4 gc = gspread.authorize(GoogleCredentials.get_application_default())


/usr/local/lib/python3.7/dist-packages/gspread/__init__.py in authorize(credentials, client_class)
     38     """
     39 
---> 40     client = client_class(auth=credentials)
     41     return client

/usr/local/lib/python3.7/dist-packages/gspread/client.py in __init__(self, auth, session)
     38     def __init__(self, auth, session=None):
     39         if auth is not None:
---> 40             self.auth = convert_credentials(auth)
     41             self.session = session or AuthorizedSession(self.auth)
     42         else:

/usr/local/lib/python3.7/dist-packages/gspread/utils.py in convert_credentials(credentials)
     57 
     58     raise TypeError(
---> 59         "Credentials need to be from either oauth2client or from google-auth."
     60     )
     61 

TypeError: Credentials need to be from either oauth2client or from google-auth.

我不知道从这里该去哪里。我联系了 Google Cloud 支持人员,但意识到这超出了他们的范围。从 Google 的角度来看,身份验证流程是有效的。

google-colaboratory gspread oauth2client
3个回答
2
投票

Google colab 最近更改了他们的 API。旧 API 已被弃用,新 API 可用。

这是 Google 提供的新代码片段,可以与

gspread

正常工作
from google.colab import auth
auth.authenticate_user()

import gspread
from google.auth import default
creds, _ = default()

gc = gspread.authorize(creds)

sh = gc.create('A new spreadsheet')

0
投票

您应该按照本指南

更改身份验证方法
  1. 进入Google开发者控制台

  2. 在标有“搜索 API 和服务”的框中,搜索“Google Drive API”和“Google Sheets”并启用它

  3. 转到“API 和服务 > 凭据”并选择“创建凭据 > 服务帐户密钥”。

  4. 填写表格

  5. 单击“创建”和“完成”。

  6. 按服务帐户上方的“管理服务帐户”。

  7. 在最近创建的服务帐户附近按 ⋮ 并选择“管理密钥”,然后单击“添加密钥 > 创建新密钥”。

  8. 选择 JSON 密钥类型并按“创建”。

你将得到一个像这样的json:

{
    "type": "service_account",
    "project_id": "api-project-XXX",
    "private_key_id": "2cd … ba4",
    "private_key": "-----BEGIN PRIVATE KEY-----\nNrDyLw … jINQh/9\n-----END PRIVATE KEY-----\n",
    "client_email": "[email protected]",
    "client_id": "473 … hd.apps.googleusercontent.com",
    ...
}
  1. 转到您的电子表格并与上述步骤中的

    client_email
    共享。就像您使用任何其他 Google 帐户一样。

  2. 将 json 文件放入驱动器中的文件夹中

  3. 将您的单元格更改为:

import gspread

json_dir = 'drive/MyDrive/credentials/credentials.json'

gc = gspread.service_account(filename=json_dir)

其中

json_dir
是第 8 步中创建的 json 文件的路径

希望有帮助


0
投票

我必须重新启动运行时并遵循新协议。我认为我们之前使用的现在已被弃用......

https://colab.research.google.com/notebooks/snippets/sheets.ipynb#scrollTo=6d0xJz3VzLOo

(根据评论,复制相关片段以供将来使用)

from google.colab import auth
auth.authenticate_user()

import gspread
from google.auth import default
creds, _ = default()

gc = gspread.authorize(creds)
© www.soinside.com 2019 - 2024. All rights reserved.