管理频道#

Conda 频道是存储软件包的位置。它们是托管和管理软件包的基础。Conda 软件包从远程频道下载,远程频道是包含 conda 软件包的目录的 URL。conda 命令搜索一组默认频道,软件包会自动从默认频道下载和更新。详细了解conda 频道以及使用它们的各种服务条款。

不同的频道可以包含相同的软件包,因此 conda 必须处理这些频道冲突。

如果您只使用 defaults 频道,则不会出现频道冲突。如果您使用的所有频道只包含不存在于频道列表中其他任何频道中的软件包,也不会出现频道冲突。conda 解决这些冲突的方式只在您的频道列表中存在托管相同软件包的多个频道时才重要。

默认情况下,conda 更倾向于从较高优先级频道安装软件包,而不是从较低优先级频道安装任何版本。因此,您现在可以安全地将频道放在频道列表的底部,以提供默认频道中不存在的额外软件包,同时仍然可以确信这些频道不会覆盖核心软件包集。

Conda 收集所有频道中具有相同名称的软件包,并按以下步骤处理它们:

  1. 按频道优先级从高到低排序软件包。

  2. 按版本号从高到低排序绑定的软件包(具有相同频道优先级的软件包)。例如,如果 channelA 包含 NumPy 1.12.0 和 1.13.1,则 NumPy 1.13.1 排序更高。

  3. 按构建号从高到低排序仍然绑定的软件包(具有相同频道优先级和相同版本的软件包)。例如,如果 channelA 包含 NumPy 1.12.0 构建 1 和构建 2,则构建 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

注意

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

要让 conda 安装任何列出的频道中最新的软件包版本

  • .condarc 文件中添加 channel_priority: disabled

  • 运行等效命令

    conda config --set channel_priority disabled
    

然后,Conda 按以下步骤排序:

  1. 按版本号从高到低排序软件包列表。

  2. 按频道优先级从高到低排序绑定的软件包。

  3. 按构建号从高到低排序绑定的软件包。

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

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

conda config --add channels new_channel

Conda 有一个等效命令

conda config --prepend channels new_channel

Conda 还提供一个命令,将新频道添加到频道列表的底部,使其成为最低优先级

conda config --append channels new_channel

严格的频道优先级#

从 4.6.0 版本开始,Conda 具有严格的频道优先级功能。严格的频道优先级可以极大地加快 conda 操作速度,还可以减少软件包不兼容问题。我们建议尽可能将频道优先级设置为“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