为何Poetry无法更新私有Git仓库中带Tag的SSH依赖?
问题解决:Poetry更新Git标签依赖的私有库
核心原因
Poetry 对 Git 依赖的 rev 字段(如固定标签、commit 哈希)会视为固定版本,默认不会主动检查仓库中的新标签或更新,只有当依赖指向分支时,poetry update 才会拉取分支的最新提交。
解决方案
1. 使用语义化版本范围匹配标签(推荐)
修改 app 项目的 pyproject.toml,将依赖配置改为结合 version 字段的形式,让 Poetry 自动识别仓库中符合版本范围的最新标签:
lib = {git = "git@github.com:org/lib.git", version = "^0.2.0"}
- 这里的
^0.2.0表示允许更新到0.x.x系列的最新版本(如0.2.1、0.3.0,规则遵循语义化版本规范)。 - Poetry 会自动扫描该 Git 仓库的所有标签(支持带
v前缀的标签,如v0.2.1),匹配符合范围的最新版本。 - 修改后执行
poetry update lib即可自动更新到最新的兼容版本。
2. 绑定固定分支配合标签发布
如果更倾向于通过分支追踪稳定版本,可以在 lib 仓库维护一个 stable 分支,每次发布新标签时将分支指向该标签的提交:
# 在 lib 仓库执行 git checkout v0.2.1 git branch -f stable git push origin stable --force
然后修改 app 的依赖配置为:
lib = {git = "git@github.com:org/lib.git", branch = "stable"}
之后执行 poetry update lib 就会拉取 stable 分支的最新代码(即对应最新标签的版本)。
3. 手动修改依赖配置后更新
如果只想临时更新到指定新标签,不想调整依赖规则,可以直接修改 app 的 pyproject.toml 中的 rev 字段:
lib = {git = "git@github.com:org/lib.git", rev = "v0.2.1"}
然后执行以下命令更新锁定文件:
poetry lock --no-update # 或者直接执行 poetry update lib
内容的提问来源于stack exchange,提问作者Robino
相关产品推荐
相关产品推荐

