我必须从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首先安装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个具有不同但兼容规格的需求文件的普遍问题。
答案 0 :(得分:3)
当将所有需求传递给单个conda install
命令而不是两个后续调用时,conda的求解器将尝试一次满足所有依赖关系。这将为您带来预期的结果,即依赖项numpy>=1.16,<1.17
和numpy
被解析为numpy的1.16.x
版本。
使用多个需求文件时,可以pass the --file
argument multiple times一次提供所有依赖项。