Python 为什么pip install requirements.txt会安装额外的软件包?

Python 为什么pip install requirements.txt会安装额外的软件包?,python,pip,requirements.txt,Python,Pip,Requirements.txt,我有一个带有膨胀requirements.tx的存储库,我想清理它。使用我已经将我的requirements.txt设置为我的存储库所需的最小软件包集。为了测试这一点,我安装了一个virtualenv来安装软件包,然后运行所有的单元测试以确保它们是令人满意的 virtualenv temp_venv --no-site-packages source temp_venv/bin/activate pip install -r requirements.txt 运行良好,但我看到收集并安装了大量

我有一个带有膨胀requirements.tx的存储库,我想清理它。使用我已经将我的requirements.txt设置为我的存储库所需的最小软件包集。为了测试这一点,我安装了一个virtualenv来安装软件包,然后运行所有的单元测试以确保它们是令人满意的

virtualenv temp_venv --no-site-packages
source temp_venv/bin/activate
pip install -r requirements.txt

运行良好,但我看到收集并安装了大量额外的软件包。为什么?是否根据所需软件包的需要对其进行标识并进行安装?如果是这样,我是否应该将它们包含在requirements.txt中?

这可能是因为您在
requirements.txt
中编写的lib具有依赖性。例如:如果您已按要求编写了
scipy
numpy
也将被安装,因为
scipy
依赖于
numpy
,,这可能是因为您在
requirements.txt
中编写的lib具有依赖性。例如:如果您按照要求编写了
scipy
,也将安装
numpy
,因为
scipy
依赖于
numpy
是。这些包是您的依赖项的依赖项​.


但是,不应该直接指定它们。自动工具知道递归下载依赖项,这将大大增加维护开销。

是的。这些包是您的依赖项的依赖项​.


但是,不应该直接指定它们。自动工具知道以递归方式下载依赖项,这会大大增加维护开销。

为了确保额外的包是真正的依赖项,请在virtualenv中尝试运行命令
pip freeze-l>requirements.txt
(请注意,
-l
标志,该标志使其仅引用当前virtualenv中的包。如果它生成相同的输出,则为依赖项。如果不是,则意味着pip收集了您的所有包,而不仅仅是当前工作的virtualenv上的包。为了确保额外的包是真正的依赖项,请尝试运行命令
pip freeze-l>requirements.txt
(注意
-l
标志,它只引用当前virtualenv中的包。如果它产生相同的输出,则是依赖项。如果不是,则意味着pip收集了您的所有包,而不仅仅是当前工作virtualenv上的包。