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

如何在Poetry的pyproject.toml中按分支选择Git依赖对应分支?

解决Poetry根据当前分支自动切换私有Git依赖分支的问题

问题背景

你需要通过Poetry管理私有Git仓库依赖,实现:

  • 默认拉取依赖的develop分支
  • 当前仓库处于master分支时,拉取依赖的master分支
  • 预发布环境用develop分支(当前仓库+依赖),生产环境用master分支(当前仓库+依赖)

之前方案的问题

你尝试将依赖拆分到master和dev分组的方式会触发版本解析失败,原因是同一个包不能同时出现在多个依赖组中,Poetry会将不同分支的同一个包判定为冲突的依赖版本,因此报错。

关于你提出的条件配置写法

不行。Poetry的pyproject.toml不支持这种动态条件表达式,rev字段只能填写固定的字符串值,无法直接写入分支判断逻辑。

可行解决方案

方案1:环境变量+脚本控制

通过环境变量动态指定依赖分支,结合脚本自动根据当前分支设置变量:

  1. 修改pyproject.toml,用环境变量占位rev值(默认设为develop):
[tool.poetry.dependencies]
private-repo = {git = "git@gitlab.com/someone/some-package.git", rev = "${PRIVATE_REPO_BRANCH:-develop}"}
  1. 编写执行脚本(比如install-deps.sh):
# 获取当前仓库的分支名
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)

# 根据分支设置依赖分支的环境变量
if [ "$CURRENT_BRANCH" = "master" ]; then
    export PRIVATE_REPO_BRANCH=master
fi

# 执行Poetry安装
poetry install

执行时直接运行bash install-deps.sh即可,脚本会自动根据当前分支切换依赖的分支。

方案2:CI/CD环境直接配置

如果是在CI/CD流程中部署,可以直接在CI配置里根据分支设置环境变量:
以GitLab CI为例:

# 预发布环境部署(develop分支)
deploy-staging:
  only:
    - develop
  script:
    - poetry install

# 生产环境部署(master分支)
deploy-production:
  only:
    - master
  script:
    - export PRIVATE_REPO_BRANCH=master
    - poetry install

内容的提问来源于stack exchange,提问作者Ehsan Khademi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:48:19