You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Poetry未更新间接依赖numpy及numpy版本安装兼容问题咨询

问题解答:Poetry依赖更新与版本兼容问题

一、为什么poetry update不更新numpy?这是预期行为吗?

咱们拆解一下背后的逻辑:

  1. 关于numpy 1.22.2无法更新:这是预期行为。虽然pandas 1.3.3的依赖声明写的是numpy >=1.17.3,但实际上pandas 1.3.x版本并不兼容numpy 1.22及以上版本(这是官方隐性的兼容限制,Poetry在依赖解析时会自动识别到)。所以Poetry不会把numpy更新到1.22.2,避免导致pandas无法正常工作。

  2. 关于numpy 1.21.2无法自动更新:这不是完全的预期行为,而是Poetry的版本稳定策略导致的。默认情况下,poetry update会优先保持poetry.lock文件中已锁定的依赖版本稳定,除非当前版本不再满足上层依赖的约束,或者你明确指定要更新某个依赖。

解决方法:

  • 如果你只想把numpy更新到pandas兼容范围内的最新版本(比如1.21.2),直接执行:
    poetry update numpy
    
    这个命令会强制更新numpy到符合所有依赖约束的最新版本。
  • 如果你希望使用numpy 1.22+版本,需要先升级pandas到支持该版本的分支(比如pandas 1.4.x及以上),再执行poetry update,Poetry就会自动安装兼容的numpy新版本。

二、新项目安装numpy时的SolverProblemError如何解决?

这个错误的核心是Python版本约束与numpy版本的兼容范围冲突:你的项目声明支持Python ^3.9(也就是>=3.9,<4.0),但numpy 1.21.2的兼容范围是Python >=3.7,<3.11。Poetry会考虑整个Python约束范围(包括3.11及以上),而1.21.x到1.22.x的numpy版本都不支持Python 3.11,因此找不到同时满足两个条件的版本,导致解析失败。

解决方法(三选一即可):

  • 缩小Python版本范围:修改pyproject.toml中的Python约束,排除numpy不支持的版本:
    [tool.poetry.dependencies]
    python = ">=3.9,<3.11"
    
    这样Poetry就能找到兼容的numpy版本(比如1.21.x或1.22.x)。
  • 明确指定兼容的numpy版本:直接安装支持Python 3.11的numpy版本,比如:
    poetry add numpy>=1.23.0
    
    numpy 1.23及以上版本已经支持Python 3.11,Poetry会自动安装符合要求的最新版本。
  • 让Poetry自动适配:如果你的开发环境实际使用的是Python 3.9或3.10(而非3.11),可以执行poetry env use 3.9(或对应版本),再执行poetry add numpy,Poetry会基于当前环境的Python版本,选择兼容的numpy版本。

内容的提问来源于stack exchange,提问作者Jobu

火山引擎 最新活动