使用PyGithub调用get_projects()获取GitHub仓库项目遇问题求助
问题排查与解决
核心问题:新旧GitHub Projects API不兼容
你浏览器里创建的是新版Projects v2(当前GitHub默认创建的项目类型),但PyGithub 1.58.1的repo.get_projects()调用的是已废弃的经典项目(v1)API——这两套系统完全不互通:
- 旧v1 API已被GitHub淘汰,因此调用创建接口会返回410错误,哪怕仓库里实际存在新版项目
repo.has_projects仅对应经典项目的启用状态,和新版项目无关,所以它返回True不代表新版项目能通过旧API访问
解决办法
- 确认项目类型:打开仓库的Projects页面,若看不到"Classic"标识,说明你创建的是新版Projects v2。
- 升级PyGithub并换用新版API方法:
- 将PyGithub升级到最新稳定版(至少1.59以上,旧版本不支持v2项目)
- 替换代码中的方法:用
repo.get_repository_projects()获取新版项目,代替原来的get_projects() - 创建新版项目使用
repo.create_repository_project(name="你的项目名")
- 核对PAT权限:确保你的PAT勾选了
projects权限(在PAT创建页的repo分类下找到projects选项,或单独的projects权限组)——新版v2项目需要明确的projects:write权限才能创建。 - curl测试用新版端点:如果要验证接口,需调用v2的API:
# 获取仓库新版项目列表 curl -H "Authorization: token 你的PAT" https://api.github.com/repos/用户名/仓库名/projects_v2 # 创建新版项目 curl -X POST -H "Authorization: token 你的PAT" -H "Content-Type: application/json" https://api.github.com/repos/用户名/仓库名/projects_v2 -d '{"name": "测试项目"}'
补充说明
如果确实需要使用经典项目,需前往仓库Settings > Features里开启"Classic Projects",但GitHub已不再推荐使用经典项目,建议直接迁移到新版v2。
内容的提问来源于stack exchange,提问作者Underoos
相关产品推荐
相关产品推荐

