是否可以强制 Python 库安装其依赖项之一的特定版本?

Is it possible to force a Python library to install a specific version of one of its dependency?

我想安装 scikit-learn==0.24.0 和 scipy==1.7.1,这是它的依赖项之一。 Scikit-learn 需要 scipy 的版本 >=0.19.1.

我有以下 requirements.txt :

scipy==1.7.1
scikit-learn==0.24.0

所以,

  1. 它下载 scipy 1.7.1
  2. 它下载 scikit-learn 0.24.0。
  3. 再次下载scipy 1.7.3版本

Python 版本:3.7 Pip 版本:18.1

我想 scipy 只在第一次下载。怎么做到的?

(使用答案框提供格式化代码。)适用于我:Debian Linux、Python 3.7、pip 21.3.1:

$ mktmpenv -p python3.7

(tmp-bf2774e21725ffd2) $ echo "scipy==1.7.1
> scikit-learn==0.24.0" > requirements.txt

(tmp-bf2774e21725ffd2) $ pip install -r requirements.txt
Collecting scipy==1.7.1
  Downloading scipy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (28.5 MB)
     |################################| 28.5 MB 12.0 MB/s            
Collecting scikit-learn==0.24.0
  Downloading scikit_learn-0.24.0-cp37-cp37m-manylinux2010_x86_64.whl (22.3 MB)
     |################################| 22.3 MB 11.4 MB/s            
Collecting numpy<1.23.0,>=1.16.5
  Downloading numpy-1.21.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (15.7 MB)
     |################################| 15.7 MB 14.5 MB/s            
Collecting threadpoolctl>=2.0.0
  Downloading threadpoolctl-3.0.0-py3-none-any.whl (14 kB)
Collecting joblib>=0.11
  Downloading joblib-1.1.0-py2.py3-none-any.whl (306 kB)
     |################################| 306 kB 11.2 MB/s            
Installing collected packages: numpy, threadpoolctl, scipy, joblib, scikit-learn
Successfully installed joblib-1.1.0 numpy-1.21.5 scikit-learn-0.24.0 scipy-1.7.1 threadpoolctl-3.0.0

知道了。

这是由于 pip。

对于 pip 18.1,它不起作用。 使用 pip 21.3,它可以工作。

我升级了pip