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

Poetry指定Python版本安装依赖时poetry lock失败求助

问题原因与解决方案

冲突原因

你的配置存在两个关键问题:

  1. Python版本覆盖不全:项目Python约束为^3.9(包含3.9、3.10、3.11+),但typing-extensions的条件约束仅覆盖了<3.10和^3.11,遗漏了Python 3.10的情况。
  2. 版本求解器的全局检查逻辑: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:23:14