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

pip如何按requirements.txt指定版本构建wheel解决依赖冲突

问题描述

现有requirements.txt依赖文件内容如下:

matplotlib==3.4.2
numpy==1.22.4

执行依赖安装命令(原书写命令漏写install参数,正确命令为pip install -r requirements.txt)完成部署后,运行python -c "import matplotlib"触发如下报错:

File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.10/site-packages/matplotlib/__init__.py", line 107, in <module>
    from . import _api, cbook, docstring, rcsetup
  File "/usr/local/lib/python3.10/site-packages/matplotlib/rcsetup.py", line 26, in <module>
    from matplotlib.colors import Colormap, is_color_like
  File "/usr/local/lib/python3.10/site-packages/matplotlib/colors.py", line 82, in <module>
    from matplotlib import _api, cbook, scale
  File "/usr/local/lib/python3.10/site-packages/matplotlib/scale.py", line 18, in <module>
    from matplotlib.ticker import (
  File "/usr/local/lib/python3.10/site-packages/matplotlib/ticker.py", line 179, in <module>
    from matplotlib import transforms as mtransforms
  File "/usr/local/lib/python3.10/site-packages/matplotlib/transforms.py", line 46, in <module>
    from matplotlib._path import (
ImportError: numpy.core.multiarray failed to import

已知环境约束:

  • 运行环境为Python 3.10
  • 项目依赖numba,其版本要求numpy<1.23,无法将numpy升级至1.23及以上版本
  • 报错根因为:pip安装matplotlib构建wheel包时,默认的隔离构建环境会拉取满足构建要求的最新numpy(1.23版本)完成C扩展编译,代码运行时加载的是requirements.txt指定的numpy 1.22.4版本,numpy C扩展跨小版本不兼容导致导入失败。
解决方案

以下方案均满足numpy<1.23的版本约束,可根据实际场景选择:

  • 方案1:关闭构建隔离,提前锁定numpy版本
    pip默认开启构建隔离,会为每个需要源码编译的包创建独立临时环境安装构建依赖,不受requirements.txt版本约束。关闭构建隔离后,构建过程会直接复用当前环境已安装的依赖,不会临时拉取高版本numpy。
    操作步骤:
    1. 调整requirements.txt顺序,将numpy放在所有依赖的最前面,保证优先安装:
      numpy==1.22.4
      matplotlib==3.4.2
      # 其余项目依赖(包括numba)按原有顺序填写
      
    2. 执行安装命令时添加--no-build-isolation参数:
      pip install --no-build-isolation -r requirements.txt
      
  • 方案2:升级matplotlib到兼容numpy 1.22.x的预编译版本
    matplotlib==3.4.2发布时间早于Python 3.10正式版,没有对应Python 3.10的官方预编译wheel,安装时必然触发源码构建,容易出现构建版本和运行版本不一致问题。matplotlib==3.5.3是官方适配Python 3.10的稳定版本,兼容numpy 1.21.x~1.22.x全系列,同时满足numba的numpy版本约束,直接安装预编译包即可避免编译带来的版本问题,仅需调整requirements.txt中matplotlib版本号:
    matplotlib==3.5.3
    numpy==1.22.4
    # 其余依赖保持原有版本即可
    
  • 方案3:通过pip约束文件强制指定构建阶段依赖版本
    无需调整原有requirements.txt内容,单独创建构建约束文件build-constraints.txt,明确指定构建阶段使用的numpy版本:
    numpy==1.22.4
    
    安装时通过--constraint参数加载约束,规则会同时作用于运行时依赖和构建依赖:
    pip install -r requirements.txt --constraint build-constraints.txt
    

注意:如果之前已经安装过版本不兼容的matplotlib,执行上述操作前先运行pip uninstall -y matplotlib numpy清理旧版本,避免缓存或残留文件影响安装结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:30:43