使用--without排除依赖后Poetry Install仍因找不到目录崩溃
解决GitLab CI中Poetry排除分组仍报错本地路径依赖不存在的问题
核心原因
Poetry的--without参数只是跳过安装指定分组的依赖,但依然会校验所有依赖的配置合法性——包括本地路径依赖的存在性。所以哪怕你排除了cli分组,只要pyproject.toml里写了../cli-parser的路径,Poetry就会检查这个目录是否存在,不存在就报错。
可行解决方法
方法1:CI中同步克隆两个仓库到同级目录
既然依赖是相对路径,就在CI脚本里把主仓库和cli-parser仓库都克隆到同一个父目录下,让../cli-parser路径有效:
# 创建父目录,确保两个仓库在同级 mkdir -p repo-group cd repo-group # 克隆主仓库和依赖仓库 git clone <你的主仓库URL> main-repo git clone <cli-parser仓库URL> cli-parser # 进入主仓库执行安装 cd main-repo poetry install --without cli --sync
这种方式完全保留原有依赖配置,适合暂时不想改依赖结构的场景。
方法2:将本地路径依赖改为私有Git仓库引用(推荐长期方案)
云CI环境本来就不适合本地路径依赖,直接把cli-parser改成私有仓库引用,适配Azure/GitLab的私有仓库访问:
- 修改pyproject.toml里的依赖配置:
[tool.poetry.dependencies] # 替换原来的path="../cli-parser" cli-parser = { git = "<你的私有仓库URL(Azure/GitLab)>", branch = "main" }
- 在CI脚本中配置Git凭证,让Poetry能拉取私有依赖(以GitLab为例,Azure类似用PAT令牌):
# 配置Git用CI_JOB_TOKEN访问私有仓库 git config --global url."https://oauth2:${CI_JOB_TOKEN}@gitlab.com/".insteadOf "https://gitlab.com/" # 执行安装,此时即使排除cli分组,也不会校验本地路径 poetry install --without cli --sync
生产环境同样能通过这个配置拉取依赖,完全适配云环境,是长期迁移的最优解。
方法3:CI临时修改pyproject.toml(应急 workaround)
如果只是临时解决CI报错,不想动依赖配置或克隆逻辑,可以在CI里先删除cli-parser的依赖行:
# 用sed删除pyproject.toml中cli-parser的路径依赖配置(根据实际内容调整匹配规则) sed -i '/cli-parser = { path = "\.\.\/cli-parser"/d' pyproject.toml # 再执行安装 poetry install --without cli --sync
这种方式属于临时应急,不推荐长期使用,避免后续配置不一致导致问题。
内容的提问来源于stack exchange,提问作者Gloweye
相关产品推荐
相关产品推荐

