管理 channels#

Conda channels 是存储包的位置。它们是托管和管理包的基础。Conda 包从远程 channels 下载,远程 channels 是包含 conda 包的目录的 URL。conda 命令搜索一组默认的 channels,包会自动从默认 channel下载和更新。阅读更多关于conda channels及其使用条款。

不同的 channels 可以有相同的包,因此 conda 必须处理这些 channel 冲突。

如果您只使用 defaults channel,则不会有 channel 冲突。如果您使用的所有 channels 仅包含您列表中任何其他 channels 中不存在的包,也不会有 channel 冲突。只有当您的 channel 列表中有多个 channels 托管相同的包时,conda 如何解决这些冲突才重要。

默认情况下,conda 优先选择优先级较高的 channel 中的包,而不是优先级较低的 channel 中的任何版本。因此,您现在可以安全地将 channels 放在 channel 列表的底部,以提供默认 channels 中没有的其他包,并且仍然可以确信这些 channels 不会覆盖核心包集。

Conda 收集所有列出的 channels 中具有相同名称的所有包,并按如下方式处理它们

  1. 按从高到低的 channel 优先级对包进行排序。

  2. 对优先级相同的包(即具有相同 channel 优先级的包)按从高到低的**版本号**排序。例如,如果 channelA 包含 NumPy 1.12.0 和 1.13.1,则 NumPy 1.13.1 将被排序更高。

  3. 对仍然相同的包(即具有相同的 channel 优先级和相同版本的包)按从高到低的**构建号**排序。例如,如果 channelA 同时包含 NumPy 1.12.0 build 1 和 build 2,则 build 2 将首先排序。channelB 中的任何包都将排序在 channelA 中的包之后。

  4. 安装排序列表中第一个满足安装规范的包。

本质上,顺序是:channelA::numpy-1.13_1 > channelA::numpy-1.12.1_1 > channelA::numpy-1.12.1_0 > channelB::numpy-1.13_1

注意

如果启用了严格的 channel 优先级,则 channelB::numpy-1.13_1 根本不会包含在列表中。

要使 conda 安装任何列出的 channel 中包的最新版本

  • channel_priority: disabled 添加到您的 .condarc 文件中。

  • 运行等效命令

    conda config --set channel_priority disabled
    

然后 Conda 按如下方式排序

  1. 按从高到低的**版本号**对包列表进行排序。

  2. 按从高到低的 channel 优先级对优先级相同的包进行排序。

  3. 按从高到低的**构建号**对优先级相同的包进行排序。

由于来自不同 channels 的构建号不可比较,因此构建号仍然排在 channel 优先级之后。

以下命令将 channel “new_channel” 添加到 channel 列表的顶部,使其成为最高优先级

conda config --add channels new_channel

Conda 有一个等效的命令

conda config --prepend channels new_channel

Conda 还有一个命令,可以将新 channel 添加到 channel 列表的底部,使其成为最低优先级

conda config --append channels new_channel

严格的 channel 优先级#

从 4.6.0 版本开始,Conda 具有严格的 channel 优先级功能。严格的 channel 优先级可以显着加快 conda 操作,并减少包不兼容问题。我们建议在可能的情况下将 channel 优先级设置为“strict”。

可以通过键入 conda config --describe channel_priority 查看有关它的详细信息。

channel_priority (ChannelPriority)
Accepts values of 'strict', 'flexible', and 'disabled'. The default
value is 'flexible'. With strict channel priority, packages in lower
priority channels are not considered if a package with the same name
appears in a higher priority channel. With flexible channel priority,
the solver may reach into lower priority channels to fulfill
dependencies, rather than raising an unsatisfiable error. With channel
priority disabled, package version takes precedence, and the
configured priority of channels is used only to break ties. In
previous versions of conda, this parameter was configured as either
True or False. True is now an alias to 'flexible'.

channel_priority: flexible