为什么 pip install requirements.txt 安装额外的包?

Why does pip install requirements.txt install extra packages?

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

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

运行很好,但我看到收集并安装了一大堆额外的软件包。为什么?这些是否被必需的包识别为需要,并因此安装?如果是这样,我是否应该将它们包含在 requirements.txt 中?

这可能是因为您在 requirements.txt 中编写的库的依赖性。例如:如果你写了 scipy 作为要求 numpy 也将被安装,因为 scipy 依赖于 numpy.

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

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

好吧,对我来说,上述答案并非如此。 Pip install 正在安装不在 requirements.txt 中的额外软件包。解决方案是:

运行 conda create -n venv_name 和 conda activate venv_name,其中 venv_name 是您的虚拟环境的名称。

运行 conda 安装 pip。这会将 pip 安装到您的 venv 目录。

然后运行 pip install -r requeriments.txt

以上答案改编自这里: