google.auth.exceptions.DefaultCredentialsError:无法自动确定凭据



我正在努力跟随https://developers.google.com/sheets/api/guides/values

我有以下python脚本:

from __future__ import print_function
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

def get_values(spreadsheet_id, range_name):
"""
Creates the batch_update the user has access to.
Load pre-authorized user credentials from the environment.
TODO(developer) - See https://developers.google.com/identity
for guides on implementing OAuth2 for the application.
"""
creds, _ = google.auth.default()
# pylint: disable=maybe-no-member
try:
service = build('sheets', 'v4', credentials=creds)
result = service.spreadsheets().values().get(
spreadsheetId=spreadsheet_id, range=range_name).execute()
rows = result.get('values', [])
print(f"{len(rows)} rows retrieved")
return result
except HttpError as error:
print(f"An error occurred: {error}")
return error

if __name__ == '__main__':
# Pass: spreadsheet_id, and range_name
get_values("id", "A1:C2")

我得到以下错误:

cchilders@cchilders-HP-ProBook-450-G3 ~/projects/update_stocks_interest_list $ python3 read_values.py 
Traceback (most recent call last):
File "/home/cchilders/projects/update_stocks_interest_list/read_values.py", line 32, in <module>
get_values("1N9hctlaS6gjRCVdpwgBx26dHr3tOFnE0125ybLuGvrk", "A1:C2")
File "/home/cchilders/projects/update_stocks_interest_list/read_values.py", line 15, in get_values
creds, _ = google.auth.default()
File "/home/cchilders/.local/lib/python3.10/site-packages/google/auth/_default.py", line 616, in default
raise exceptions.DefaultCredentialsError(_HELP_MESSAGE)
google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://cloud.google.com/docs/authentication/getting-started
cchilders@cchilders-HP-ProBook-450-G3 ~/projects/update_stocks_interest_list $ ls
credentials.json  read_values.py

我登录到开发人员控制台,下载了名为client secret的Oauth2文件,并按照在线建议将其重命名为credentials.json。表单api文档没有解释google.auth是如何加载凭据的。我尝试在项目文件夹中创建一个.env文件,并将GOOGLE_APPLICATION_CREDENTIALS设置为CREDENTIALS.json,即同一文件夹中的文件。它也犯了同样的错误。

如何使此脚本与我的凭据一起使用?

GOOGLE_APPLICATION_CREDENTIALS通常应指向服务帐户文件路径。

从谷歌关于这个主题的文档中,你会想:

  1. 为您的服务创建一个具有正确权限的服务帐户
  2. 将该服务帐户下载为JSON文件
  3. GOOGLE_APPLICATION_CREDENTIALS指向JSON文件的路径,例如GOOGLE_APPLICATION_CREDENTIALS='/src/my-service-account.json'

具体步骤(信用谷歌文档(

  1. 创建服务帐户:gcloud iam service-accounts create NAME

  2. 添加服务帐户的权限策略:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

  3. 创建服务帐户JSON文件:gcloud iam service-accounts keys create FILE_NAME.json --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

  4. 导出当前shell中的环境变量或源文件:export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

最新更新