如何在使用2个“requirements.txt”文件时防止conda更新软件包

4

背景

我需要从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首先安装了一个版本为1.16.*的numpy,然后想要将其更新至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 命令的顺序,但这并不能解决具有不同但兼容规范的两个需求文件的普遍问题。


1
嗯,不太确定我是否正确理解了你的问题:你是按照你的示例使用 conda install 进行安装吗?如果是这样,你可以添加任意数量的软件包,conda 将尝试找出一种有效的解决方法。conda install numpy "numpy>=1.16,<1.17" 将安装 numpy=1.16.x。如果你有多个文件,你可以多次传递 --file= 参数 - cel
1
@cel 我的问题是,下一次我添加要求文件时,在第二个命令中,先前的限制将被覆盖:conda 将安装 1.18 而不是保持 1.16.*。 - Dr_Zaszuś
1
@cel 但是提供多个要求文件是一个很好的点子。我会尝试一下。 - Dr_Zaszuś
2
我已经检查过了,它可以正常工作。@cel,如果你把它发布为答案,我会接受的! - Dr_Zaszuś
@AMC 我需要一种自动化的方式,让最终用户可以将不同软件包中的 requirements.txt 文件合并在一起,因此我正在编写一个脚本来完成这个任务。由于 requirements.txt 可能会随着时间而发生变化,所以我不能只手动执行一次。 - Dr_Zaszuś
显示剩余5条评论
1个回答

4
当您将所有要求传递给单个conda install命令而不是两个后续调用时,conda的解算器将尝试一次满足所有依赖项。这将使您获得预期的结果,即依赖项numpy>=1.16,<1.17numpy被解析为1.16.x版本的numpy。
当您使用多个需求文件进行工作时,您可以多次传递--file参数以一次性提供所有依赖项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接