Poetry指定Python版本安装依赖时poetry lock失败求助
问题原因与解决方案
冲突原因
你的配置存在两个关键问题:
- Python版本覆盖不全:项目Python约束为
^3.9(包含3.9、3.10、3.11+),但typing-extensions的条件约束仅覆盖了<3.10和^3.11,遗漏了Python 3.10的情况。 - 版本求解器的全局检查逻辑:Poetry生成锁文件时会遍历所有符合Python约束的环境,尝试确保所有依赖约束在全局层面无冲突。此时求解器错误地将
typing-extensions的两个互斥版本约束视为全局同时生效的要求,导致pydantic要求的typing-extensions>=3.7.2与^3.11环境下的typing-extensions~3.6.2(<3.7.0)产生冲突。
修复方案
修改typing-extensions的条件约束,覆盖Python 3.10版本,确保pydantic所在的<3.10环境中,typing-extensions版本满足依赖要求:
[tool.poetry] name = "p1" version = "0.1.0" description = "" authors = ["me"] readme = "README.md" [tool.poetry.dependencies] python = "^3.9" typing-extensions = [ {version = "~3.7.2", python = "<3.11"}, {version = "~3.6.2", python = "^3.11"} ] pydantic = {version = "~1.6.1", python = "<3.10", extras = ["typing_extensions"]} [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
调整后各环境的依赖逻辑:
- Python 3.9:安装
pydantic~1.6.1(依赖typing-extensions>=3.7.2),同时typing-extensions使用~3.7.2,满足依赖要求。 - Python 3.10:不安装
pydantic,typing-extensions使用~3.7.2,无冲突。 - Python 3.11+:不安装
pydantic,typing-extensions使用~3.6.2,无冲突。
总结
这并非Poetry的bug,而是对条件依赖的版本覆盖范围考虑不周导致的求解冲突。通过补全Python版本的约束覆盖,即可解决问题。
内容的提问来源于stack exchange,提问作者BarakKol33
相关产品推荐
相关产品推荐

