首页 > 解决方案 > 使用 2 `requirements.txt` 时如何防止 conda 更新包

问题描述

语境

我必须从 Gitlab 安装两个包(由于版权限制,无法在任何频道conda或频道上使用)。pip第一个包的要求包含

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 首先安装 1.16.* 版本,numpy然后在启动最后一个命令时将其更新到 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。有没有人知道如何实现这一目标?

当然,我可以install在这个特定的 MWE 中颠倒命令的顺序,但它不能解决具有 2 个具有不同但兼容规范的需求文件的一般问题。

标签: pythonpipconda

解决方案


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

当您处理多个需求文件时,您可以多次传递--file参数以一次性提供所有依赖项。


推荐阅读