使用Poetry时,同一包生产/开发源配置失效如何解决?
问题:Poetry生产环境始终使用本地依赖版本而非PyPI版本
我使用Python/Poetry管理虚拟环境,需求是生产环境从PyPI安装django-listing,开发环境使用本地版本,因此编写了如下pyproject.toml文件:
[tool.poetry] ... [tool.poetry.dependencies] python = "^3.11" Django = "^4.1.7" ... [tool.poetry.group.prod] optional = true [tool.poetry.group.prod.dependencies] django-listing = "^0.0.15" [tool.poetry.group.dev] optional = true [tool.poetry.group.dev.dependencies] django-listing = {path = "../django-listing", develop = true} [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
执行poetry install --with prod --without dev后,始终使用django-listing的开发版本,即使清除缓存、重建虚拟环境也无效。使用的是Poetry 1.4和Python 3.11,请问该如何解决?
解决方案
核心原因
Poetry的依赖解析逻辑中,本地路径依赖的优先级高于PyPI版本依赖,即使排除了dev分组,之前安装过的本地包残留或依赖缓存也会导致解析异常。
步骤1:彻底清理环境与缓存
- 删除项目根目录的
poetry.lock文件 - 删除现有虚拟环境:
poetry env remove python3.11(根据你的Python版本调整) - 清理Poetry的PyPI缓存:
poetry cache clear pypi --all
步骤2:调整pyproject.toml的依赖结构
不要将同一个包重复放在不同分组,改用默认依赖+开发环境替换的方式:
[tool.poetry] ... [tool.poetry.dependencies] python = "^3.11" Django = "^4.1.7" django-listing = "^0.0.15" # 默认使用PyPI版本,生产环境直接复用 ... [tool.poetry.group.dev] optional = true [tool.poetry.group.dev.dependencies] # 开发环境替换成本地路径依赖,覆盖默认的PyPI版本 django-listing = {path = "../django-listing", develop = true} [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
步骤3:重新安装对应环境
- 生产环境安装:
poetry install --without dev - 开发环境安装:
poetry install --with dev
验证结果
安装完成后,执行poetry show django-listing:
- 生产环境应显示版本
0.0.15,来源为PyPI - 开发环境应显示本地路径
../django-listing
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

