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

pip可编辑安装中传递依赖的推断逻辑及存储位置咨询

pip 推断传递依赖的逻辑

pip 处理传递依赖的核心流程是递归解析:

  • 首先读取目标包的直接依赖声明,明确依赖包及其版本约束
  • 对每个直接依赖,重复执行“读取依赖声明”的操作,直到收集完所有层级的依赖
  • 过程中会自动处理版本冲突,选择满足所有约束条件的最优版本(默认优先选最新兼容版本)
不同类型项目中依赖信息的存放位置

1. 已构建项目(Wheels)

Wheels 是预编译的二进制包,依赖信息直接存储在包内的 {package-name}.dist-info/METADATA 文件中:

  • 该文件遵循 PEP 规范,通过 Requires-Dist 字段列出所有直接依赖,包含版本约束、可选依赖等细节
  • pip 安装 Wheel 时无需执行构建脚本,直接读取此文件即可获取依赖信息,这也是 Wheel 安装速度快的原因之一

2. 源码项目(SDists)

SDists 是源码分发包,依赖信息的声明与存储分两个阶段:

  • 源码阶段:依赖最初定义在项目根目录的 setup.py、setup.cfg 或 pyproject.toml 中(比如 setup.py 里的 install_requires 参数,pyproject.toml 里的 dependencies 字段)
  • 安装阶段:pip 会先通过 pyproject.toml 确定构建后端(如 setuptools),执行构建流程生成临时元数据,最终在安装后的 {package-name}.dist-info/METADATA 文件(或构建过程中生成的 PKG-INFO 文件)中,整理出标准化的依赖列表

3. 可编辑安装(Editable Installs)

可编辑安装时,pip 不会将包复制到 site-packages,而是通过链接指向源码目录,依赖信息的处理分为两种情况:

  • 依赖声明的源头还是源码目录下的 setup.py、setup.cfg 或 pyproject.toml
  • 安装后,site-packages 中会生成对应的 {package-name}.egg-info(setuptools 传统方式)或 {package-name}.dist-info 目录,其中的 METADATA 或 PKG-INFO 文件会存储解析后的依赖信息
  • 注意:如果修改了源码中的依赖声明,必须重新执行 pip install -e . 更新元数据文件,否则 pip 无法识别依赖变化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:57:06