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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:05:33