PyDrive2服务账号认证教程:服务器上免登录自动化操作Google Drive
【免费下载链接】PyDrive2Google Drive API Python wrapper library. Maintained fork of PyDrive.项目地址: https://gitcode.com/gh_mirrors/py/PyDrive2
在服务器上自动化操作 Google Drive,最大的痛点就是 OAuth2.0 需要人工登录授权。本教程将教你使用PyDrive2的服务账号认证(Service Account)方式,彻底告别浏览器授权流程,实现服务器免登录自动化操作 Google Drive。PyDrive2 是 PyDrive 的维护分支,封装了 Google Drive API,三行代码即可完成服务账号认证。
为什么服务器自动化首选服务账号认证?
如果你用传统的 OAuth 客户端 ID,首次必须人工打开浏览器授权,这在无图形界面的服务器上非常麻烦,而且 token 过期后还要重新授权。服务账号认证则完全不同:
- 🤖 完全免交互,无需浏览器、无需人工授权
- 🔄 Token 自动刷新,适合长期运行的定时任务
- 🔒 权限可精确控制,安全性更高
- ☁️ 天然适配 Cron 任务、CI/CD、Docker 等无头环境
第一步:在 Google Cloud 控制台创建服务账号
在使用 PyDrive2 服务账号认证之前,需要准备一个 JSON 格式的服务账号密钥文件,步骤如下:
- 打开 Google Cloud Console,创建或选择一个项目
- 进入「API 与服务」→「凭据」→「创建凭据」→「服务账号」
- 给服务账号命名后,点击「创建并继续」
- 在服务账号列表中找到它,点击「管理密钥」→「添加密钥」→「创建新密钥」
- 密钥类型选择JSON,下载保存为
service-secrets.json
⚠️ 关键一步:服务账号默认无法访问你的 Drive 文件,必须把目标文件夹或文件分享给服务账号的邮箱(格式类似
xxx@xxx.iam.gserviceaccount.com),否则会报权限错误。
第二步:配置 settings.yaml 服务账号参数
PyDrive2 通过settings.yaml统一管理认证配置。服务账号认证的核心是设置client_config_backend: service,并在service_config中指定密钥文件路径:
client_config_backend: service service_config: client_json_file_path: service-secrets.json save_credentials: False oauth_scope: - https://www.googleapis.com/auth/drive配置说明:
| 配置项 | 作用 |
|---|---|
client_config_backend: service | 声明使用服务账号认证 |
client_json_file_path | 服务账号 JSON 密钥文件路径 |
client_json_dict | 直接把 JSON 内容作为字典传入 |
client_json | 直接把 JSON 内容作为字符串传入 |
client_user_email | 需要模拟的普通用户邮箱(委派模式) |
oauth_scope | 授权范围,默认即可 |
如果不想把密钥落盘,也可以改用client_json_dict或client_json,适合把密钥写进环境变量的场景。
第三步:三行代码完成服务账号认证
PyDrive2 将整个服务账号认证流程封装为ServiceAuth()方法,核心逻辑在 pydrive2/auth.py 中。认证完成后即可创建GoogleDrive对象操作文件:
from pydrive2.auth import GoogleAuth from pydrive2.drive import GoogleDrive settings = { "client_config_backend": "service", "service_config": { "client_json_file_path": "service-secrets.json", } } gauth = GoogleAuth(settings=settings) gauth.ServiceAuth() drive = GoogleDrive(gauth) # 现在可以自由操作 Google Drive 了 file_list = drive.ListFile({'q': "'root' in parents"}).GetList() for f in file_list: print(f['title'], f['id'])运行这段代码,不再弹出任何浏览器授权页面,直接就能列出 Drive 根目录文件。官方文档中也有同样的示例,可参考 docs/oauth.rst 中的 "Authentication with a service account" 章节。
如何开启委派模式访问普通用户文件?
默认情况下服务账号拥有独立的 Drive 空间。如果业务上需要服务账号代替某个普通用户操作其 Drive 文件,可以配置 G Suite 的「全域委派」:
client_config_backend: service service_config: client_json_file_path: service-secrets.json client_user_email: target-user@your-company.comPyDrive2 内部会调用create_delegated(sub=user_email)实现委派。注意:全域委派需要在 Google Workspace 管理后台开启,普通 Gmail 账号不支持此功能。
服务账号认证常见踩坑指南
- 🔑权限拒绝错误:99% 的情况是没有把文件/文件夹分享给服务账号邮箱,去 Drive 里右键分享即可
- 📂只能访问被分享的资源:服务账号无法看到整个 Drive,只能访问显式分享给它的内容
- ⏰Token 过期:
ServiceAuth()会自动刷新 token,无需手动干预 - 🧪测试参考:项目在 pydrive2/test/settings/ 目录提供了多份服务账号测试配置,如
test_oauth_test_07.yaml、test_oauth_test_08.yaml,可以对照参考 - 📦安装:
pip install PyDrive2即可,无需额外依赖
总结
PyDrive2 的服务账号认证把 Google Drive 自动化从「需要人工授权的 OAuth2.0」变成了「纯代码免登录」,特别适合服务器定时备份、数据同步、CI/CD 流水线等场景。核心配置只需一个settings.yaml加三行 Python 代码:配置client_config_backend: service、调用gauth.ServiceAuth()、创建GoogleDrive(gauth),即可在服务器上持续稳定地自动化操作 Google Drive。
【免费下载链接】PyDrive2Google Drive API Python wrapper library. Maintained fork of PyDrive.项目地址: https://gitcode.com/gh_mirrors/py/PyDrive2
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考