Ale*_*x I 4 python anaconda conda conda-forge
从 conda-forge 安装单个软件包时,我遇到了 conda 的一个小但烦人的问题。通常我会运行这样的事情:
conda install -c conda-forge somepackage
这会导致使用 conda-forge 频繁更新其他软件包:几乎总是 ca-certificates、certifi 和 openssl;有时还有主要的软件包,如 python、numpy 等(全部来自 conda-forge)。我怀疑这些更新并不是绝对必要的;这些包使用一些逻辑来拉入,“为了安装最新版本的 somepackage,我需要 python>=3.8,但当前的 python 是 3.7;我可以使用 conda-forge,所以我将获得最新的 python来自 conda-forge,它比默认版本更新”。
我想要完成的是:安装任何版本的 somepackage (不一定是最新的),同时尽可能少地从 conda-forge 安装。特别是,如果可以在保留已安装的软件包和升级之间进行选择,我总是想保留;如果在默认通道和 conda-forge 之间有一个选择,我总是想要默认(即使这些选择导致我尝试安装的新软件包的旧版本和/或它们的新依赖项结束 - 但不是)如果它们导致安装无法进行)。
我该如何实现这个目标?
一般来说,我赞同@jakub 的回答中的结论:定义合理的全局通道优先级,并尽量避免通过参数使用临时--channel|-c规范。
还有一些其他选项可能值得指出:
指定特定包应来自给定通道
conda install conda-forge::somepackage
Run Code Online (Sandbox Code Playgroud)
并且这不会改变通道优先级。
在命令中显式列出通道优先级install:
conda install -c defaults -c conda-forge somepackage
Run Code Online (Sandbox Code Playgroud)
这将默认值置于最高优先级。
通过 YAML 文件定义和操作环境。YAML 包含通道部分,因此您可以明确优先级。如果您需要在环境中使用新包,可以将其添加到 YAML - 比方说env.yaml- 并且可以使用以下命令将该编辑转移到环境中
conda env update -f env.yaml
Run Code Online (Sandbox Code Playgroud)