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

Pip安装:构建wheel包时如何锁定Python依赖库的指定版本

问题:如何强制pip在构建wheel包时使用指定版本的依赖包?

问题背景

现有Python项目已在setup.py及依赖配置中锁定全部依赖版本,精简后的依赖配置如下:

cffi==1.15.0
<some_other_pkg>==1.0.0
<lots of other packages>

执行pip install -r requirements.pip流程时,pip为some_other_pkg构建wheel的环节自动拉取使用了cffi==1.15.1,不符合版本锁定预期。由于部署服务器环境无法兼容cffi==1.15.1,版本不匹配会直接导致服务运行异常。当前环境技术栈为Python3、virtualenv、pip、setuptools,需要配置pip使其在wheel构建环节也遵循指定的cffi==1.15.0版本要求。

问题根源

这个现象是pip默认遵循PEP 517规范的构建隔离机制导致的:pip为每个需要源码编译构建wheel的包创建独立的临时构建环境,该环境仅读取当前待构建包自身声明的构建依赖版本范围,不会同步读取项目全局锁定的依赖版本。如果待构建包声明的构建依赖是cffi>=1.xx这类开放范围,pip就会在临时构建环境中拉取符合范围的最新版本,最终出现构建环节依赖版本和全局锁定版本不一致的问题。

可落地方案

按侵入性从低到高排序,可选择以下任意一种方案解决:

  • 方案1:使用约束文件强制全链路版本锁定(推荐)
    新建约束文件(例如命名为constraints.txt),写入需要强制锁定的构建依赖版本:
    cffi==1.15.0
    
    安装依赖时通过-c参数加载约束文件即可,pip的新解析器(pip 20.3及以上版本默认启用)会将约束规则应用到所有依赖解析场景,包括临时构建环境内的依赖安装,不会再拉取不符合版本要求的包:
    pip install -c constraints.txt -r requirements.pip
    
    该方案不需要关闭构建隔离,也不需要提前预装依赖,对现有安装流程改动最小。
  • 方案2:提前预装构建依赖+关闭构建隔离
    先在激活的virtualenv环境中提前安装锁定版本的构建依赖:
    pip install cffi==1.15.0
    
    安装剩余依赖时传入--no-build-isolation参数,关闭pip的独立构建隔离环境,pip会直接复用当前虚拟环境中已安装的依赖完成wheel构建,自然会使用提前装好的1.15.0版本cffi:
    pip install --no-build-isolation -r requirements.pip
    

    注意:使用该方案必须提前在环境中装齐所有待安装包的构建依赖,否则构建过程会报缺依赖错误。

  • 方案3:全局pip配置固定约束规则
    如果需要在环境中固定该版本规则,避免每次安装都传参数,可以修改对应virtualenv环境下的pip.conf配置,添加如下内容:
    [install]
    constraints = /absolute/path/to/your/constraints.txt
    
    配置生效后所有pip install操作都会自动加载约束文件的版本规则,构建环节也不会拉取不符合要求的依赖版本。

内容的提问来源于stack exchange,提问作者maximum-warning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:51:18