You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gspread OAuth授权后,每次运行代码仍需重新授权的问题求助

问题
  • OS: Mint Linux 21.3
  • Python: 3.10
  • gspread: 6.0.0
  • IDE: PyCHarm

我尝试使用gspread访问谷歌表格,虽能成功实现访问,但每次运行代码都需重新授权。

我已正确配置凭证,并指定了授权用户文件的存储位置。首次运行代码时,该文件会被创建,代码也能得到预期结果。但再次运行代码时,oauth方法似乎并未读取该授权用户文件,仍需重新授权,授权后代码才能正常运行。

代码如下:

import gspread

SCOPES = ["https://www.googleapis.com/auth/spreadsheets"]
SPREADSHEET_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

CRED_FILE = "client_secret.json"
AUTH_USER_FILE = 'auth_user.json'

gc = gspread.oauth(credentials_filename=CRED_FILE, scopes=SCOPES, authorized_user_filename=AUTH_USER_FILE)

# Open a sheet from a spreadsheet in one go
spreadsheet = gc.open_by_key(SPREADSHEET_ID)

ws = spreadsheet.get_worksheet(0)

# Update a range of cells using the top left corner address
ws.update([[1, 2], [3, 4]], 'A1')

我是否遗漏了什么配置?为何每次运行都需要授权?我原以为授权会持续到过期为止。另外,我曾使用Google API客户端,授权后无需重复操作,但该工具对我来说难度较高,因此希望改用gspread。

解决方案
  1. 检查授权文件的权限与路径
    确保auth_user.json所在目录有读写权限,Mint Linux下可通过命令调整:
chmod 600 auth_user.json

同时确认PyCharm的运行工作目录和文件存放目录一致,避免因相对路径导致文件找不到。建议直接使用绝对路径指定AUTH_USER_FILE,比如:

AUTH_USER_FILE = '/home/your_username/your_project/auth_user.json'
  1. 添加离线访问权限
    如果auth_user.json中没有refresh_token字段,说明首次授权未请求离线访问,导致无法自动刷新令牌。修改SCOPES添加离线权限:
SCOPES = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/offline"]

删除旧的auth_user.json后重新授权一次,后续就能自动刷新令牌,无需重复授权。

  1. 验证凭证配置
    确认Google Cloud Console中创建的是「桌面应用」类型的OAuth客户端ID,且重定向URI设置为默认的http://localhost:8080/。如果重定向URI不匹配,授权文件可能无法被正常读取。

  2. 排查版本兼容性
    gspread 6.0.0可能存在OAuth处理的小问题,可尝试降级到稳定版本测试:

pip install gspread==5.12.0

内容的提问来源于stack exchange,提问作者Dave L.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:07:44