Ben*_*mer 3 python dependencies conda
手册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.
Run Code Online (Sandbox Code Playgroud)
首先,这是否也适用于它确定需要安装或更新的依赖项?假设答案是“是”;这种行为可以改变吗?例如,在使用遗留代码时,尽可能少地更新依赖项或安装仍然有效的最旧版本的依赖项可能会很有用。有没有某种方法可以让 conda 依赖项解析器自动解决这个问题,或者在这种情况下是否必须手动找出依赖项更新?
或者也许我完全错了,这是默认行为?从文档中我不清楚依赖项解析规则。
Conda 首先尝试查找可以在不更改任何已安装软件包的情况下安装所请求软件包的版本(冻结解决方案)。如果失败,它只是从头开始重新求解整个环境,并添加新的约束(完整求解)。没有中间(例如,最小化更新的包)。也许这种情况将来会改变,但这已经是 4.6[?]-4.12 版本的情况。
如果需要手动解决问题,我强烈建议研究Mamba。除了作为 的编译(快速!)直接替代品之外conda,该mamba repoquery工具还有助于识别有问题的约束。它有一个depends用于识别依赖关系的子命令和一个whoneeds用于反向依赖关系的子命令。
如果我使用遗留代码,我可能会尝试为环境定义 YAML ( env.yaml ) 并在关键包上设置上限。如果我需要新的包,我会试运行添加它(例如,mamba install -d somepkg)以查看它如何影响环境,找出它需要的任何约束(同样是上限),将其添加到 YAML,然后实际使用mamba env update -f env.yaml.