为什么实际依赖与requirements.txt中的不同?
我安装了一个叫做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会尝试找到一个版本组合,满足所有这些限制。