Poetry:如何为指定包定义安装回退机制
这种配置方式不可行
你写的重复声明依赖的方式在Poetry里是无效的,因为Poetry会忽略重复依赖项中先声明的配置,只保留最后一行的内容。也就是说不管../my-backend路径是否存在,最终生效的都会是my-backend = {version = "^3.0.0"},完全达不到你想要的“路径存在用开发模式,不存在回退到PyPI包”的效果。
正确的实现方案
方案1:使用开发依赖组
把路径依赖放到专门的开发依赖组里,通过命令参数区分开发和部署场景:
[tool.poetry.dependencies] python = ">=3.11" my-backend = "^3.0.0" [tool.poetry.group.dev.dependencies] my-backend = {path = "../my-backend", develop = true}
- 开发阶段执行:
poetry install --with dev,此时会优先使用本地路径的开发模式依赖 - 服务器部署时执行:
poetry install --without dev,只会安装PyPI上的正式版本
方案2:使用条件依赖(通过环境变量控制)
利用Poetry的依赖标记功能,通过环境变量切换依赖来源:
[tool.poetry.dependencies] python = ">=3.11" my-backend = [ {path = "../my-backend", develop = true, markers = "env DEV_MODE = 'true'"}, {version = "^3.0.0"} ]
- 开发时设置环境变量后安装:
export DEV_MODE=true poetry install - 服务器部署时直接执行
poetry install,不设置DEV_MODE就会自动使用PyPI上的版本
内容的提问来源于stack exchange,提问作者Nic
相关产品推荐
相关产品推荐

