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

How to prevent conda updating packages when using 2 `requirements.txt`

上下文

我必须从 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.* 版本,然后要将其更新到 v.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 个不同但兼容规范的需求文件的一般问题。

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

当您处理多个需求文件时,您可以pass the --file argument multiple times一次性提供所有依赖项。