conda 可以在最小更新依赖项的同时执行安装吗?

Can conda perform an install whilst minimally updating dependencies?

conda install 手册页说

Conda attempts to install the newest versions of  the  requested
packages.  To  accomplish this, it may update some packages that
are already installed, or install additional packages.

那么首先,这是否也适用于它确定需要安装或更新的依赖项?假设答案是“是”;这种行为可以改变吗?例如,在使用遗留代码时,尽可能少地更新依赖项或安装仍然可用的最旧版本的依赖项可能很有用。有没有什么方法可以让 conda 依赖解析器自动解决这个问题,或者在这种情况下是否必须求助于手动解决依赖更新?

或者我完全错了,这是默认行为?从文档中我不清楚依赖项解析规则。

Conda 的两阶段求解

Conda 首先尝试查找可以在不更改任何已安装软件包的情况下安装的所请求软件包的版本(frozen solve)。如果失败,它会简单地从头开始重新解决整个环境,并添加新的约束(完全解决)。 中间没有(例如,最小化软件包更新)。也许这在未来会改变,但这已经是 4.6[?]-4.12.

版本的状态

曼巴

如果需要手动解决问题,我强烈建议您查看 Mamba。除了作为 conda 的编译(快速!)替代品外,mamba repoquery 工具还有助于识别有问题的约束。它有一个用于识别依赖关系的 depends 子命令和一个用于反向依赖关系的 whoneeds 子命令。

建议的工作流程

如果我使用遗留代码,我可能会尝试为环境定义一个 YAML (env.yaml) 并在关键包上设置上限。如果我需要新包,我会干 运行 添加它(例如,mamba install -d somepkg)以查看它如何影响环境,弄清楚它是否需要任何约束(再次是上限),将其添加到YAML,然后使用 mamba env update -f env.yaml.

实际安装它