如何在Poetry的pyproject.toml中按分支选择Git依赖对应分支?
解决Poetry根据当前分支自动切换私有Git依赖分支的问题
问题背景
你需要通过Poetry管理私有Git仓库依赖,实现:
- 默认拉取依赖的
develop分支 - 当前仓库处于
master分支时,拉取依赖的master分支 - 预发布环境用
develop分支(当前仓库+依赖),生产环境用master分支(当前仓库+依赖)
之前方案的问题
你尝试将依赖拆分到master和dev分组的方式会触发版本解析失败,原因是同一个包不能同时出现在多个依赖组中,Poetry会将不同分支的同一个包判定为冲突的依赖版本,因此报错。
关于你提出的条件配置写法
不行。Poetry的pyproject.toml不支持这种动态条件表达式,rev字段只能填写固定的字符串值,无法直接写入分支判断逻辑。
可行解决方案
方案1:环境变量+脚本控制
通过环境变量动态指定依赖分支,结合脚本自动根据当前分支设置变量:
- 修改
pyproject.toml,用环境变量占位rev值(默认设为develop):
[tool.poetry.dependencies] private-repo = {git = "git@gitlab.com/someone/some-package.git", rev = "${PRIVATE_REPO_BRANCH:-develop}"}
- 编写执行脚本(比如
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
相关产品推荐
相关产品推荐

