使用2`requirements.txt`时如何防止conda更新软件包

时间:2020-07-06 10:05:36

标签: python pip conda

上下文

我必须从Gitlab安装两个软件包(由于版权限制,在任何condapip频道上均不可用)。 第一个程序包的要求包含

numpy>=1.16,<1.17

第二种状态的要求只是

numpy

这是我正在做的简化的MWE:

conda create -n test2
conda activate test2
conda install "numpy>=1.16,<1.17"
conda install --freeze-installed numpy

结果

Conda首先安装numpy的1.16。*版本,然后在启动最后一条命令时将其更新为1.18版:

Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/user/miniconda3/envs/test2

  added / updated specs:
    - numpy


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    numpy-1.18.5               |   py38h8854b6b_0         5.2 MB  conda-forge
    ------------------------------------------------------------
                                           Total:         5.2 MB

The following packages will be UPDATED:

  numpy                               1.16.5-py38h95a1406_0 --> 1.18.5-py38h8854b6b_0


Proceed ([y]/n)? n

预期行为

当我同时安装两者时,我只想最后安装numpy=1.16.*

问题

--freeze-installed选项似乎仅适用于依赖项。如果新的要求与安装的版本不冲突,则无法找到不会更新主软件包的类似选项。类似于--no-update。有人对如何实现这一目标有想法吗?

当然,我可以在这个特定的MWE中反转install命令的顺序,但是它不能解决具有2个具有不同但兼容规格的需求文件的普遍问题。

1 个答案:

答案 0 :(得分:3)

当将所有需求传递给单个conda install命令而不是两个后续调用时,conda的求解器将尝试一次满足所有依赖关系。这将为您带来预期的结果,即依赖项numpy>=1.16,<1.17numpy被解析为numpy的1.16.x版本。

使用多个需求文件时,可以pass the --file argument multiple times一次提供所有依赖项。