为什么实际依赖与requirements.txt中的不同?

1 投票
1 回答
43 浏览
提问于 2025-04-14 17:41

我安装了一个叫做xformers的包,这里是它的依赖关系树。

D:\Projects\Learning>pipdeptree -p xformers
xformers==0.0.23.post1
├── numpy [required: Any, installed: 1.26.2]
└── torch [required: ==2.1.2, installed: 2.1.2+cu121]
    ├── filelock [required: Any, installed: 3.13.1]
    ├── fsspec [required: Any, installed: 2024.2.0]
    ├── Jinja2 [required: Any, installed: 3.1.3]
    │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
    ├── networkx [required: Any, installed: 3.2.1]
    ├── sympy [required: Any, installed: 1.12]
    │   └── mpmath [required: >=0.19, installed: 1.3.0]
    └── typing_extensions [required: Any, installed: 4.10.0]

从中可以看到,它依赖于 torch==2.1.2

但是在requirements.txt 文件中却声明了一个较低的版本。

torch >= 1.12
numpy

而且setup.py 文件只是读取了 requirements.txt(在第403行),看起来没有其他特别的地方。

那么,这到底是怎么回事呢?

下面的图片是一个和xformers==0.0.24以及torch==2.1.2类似的案例,希望能有所帮助。

展示

1 个回答

0

在使用Python时,处理软件包的依赖关系,特别是用pip和requirements.txt文件时,里面列出的要求是兼容性的基础。这意味着requirements.txt中列出的软件包是软件正常运行所需的最低版本。

确定要安装哪个版本的依赖包,是根据所有已安装软件包的requirements.txt文件中指定的版本限制来决定的。pip会尝试找到一个版本组合,满足所有这些限制。

撰写回答