应该在 Python 环境中使用 conda 还是 conda-forge?

Condaconda-forge都是 Python 包管理器。当一个包同时存在于两个存储库中时,什么是合适的选择?例如,可以安装 Django,但是两者之间的区别在于几个依赖关系(conda-forge 有更多的依赖关系)。对于这些差异没有任何解释,甚至连一个简单的自述文件都没有。

应该用哪一个? Conda 还是 Conda-forge? 有关系吗?

118955 次浏览

简单的回答是,根据我的经验,你用哪一种并不重要。

长话短说:

所以conda-forge是一个额外的安装包的通道。从这个意义上说,它并不比默认通道或人们已将包发布到的其他数百个(数千个?)通道中的任何一个更特殊。如果你在https://anaconda.org注册并上传你自己的Conda包,你可以添加自己的频道。

这里我们需要区分,我认为你在问题中的措辞并不清楚,conda是跨平台的包管理器,conda-forge是包通道。Anaconda Inc.(以前的Continuum IO)是conda软件的主要开发人员,也维护了一个单独的包通道,这是在不更改任何选项的情况下键入conda install packagename时的默认通道。

有三种方法可以更改通道的选项。前两个是在每次安装包时执行的,最后一个是持久执行的。第一个方法是每次安装一个包时指定一个通道:

conda install -c some-channel packagename

当然,该包必须存在于该通道上。这种方法将从some-channel安装packagename及其所有依赖项。或者,你可以指定:

conda install some-channel::packagename

该包仍然必须存在于some-channel上,但现在,只有packagename将从some-channel中提取。将从默认的通道列表中搜索满足依赖关系所需的任何其他包。

要查看你的通道配置,你可以这样写:

conda config --show channels

你可以用conda config来控制搜索频道的顺序。你可以这样写:

conda config --add channels some-channel

将通道some-channel添加到channels配置列表的顶部。这赋予some-channel最高的优先级。优先级决定(在某种程度上)当多个通道具有特定的包时选择哪个通道。若要将通道添加到列表的末尾,并赋予其最低优先级,请键入

conda config --append channels some-channel

如果要删除所添加的通道,可以通过写入操作

conda config --remove channels some-channel

看到

conda config -h

更多选项。

综上所述,使用conda-forge通道而不是Anaconda维护的defaults通道有四个主要原因:

  1. conda-forge 五月上的包比defaults通道上的包更新
  2. conda-forge通道上有一些包不能从defaults中使用
  3. 你可能更喜欢使用诸如openblas (from conda-forge)这样的依赖项,而不是mkl (from defaults)。
  4. 如果你正在安装一个需要编译库的包(例如,一个C扩展或一个C库的包装器),由于基本C库的二进制兼容性,如果你从一个通道安装一个环境中的所有包,它五月减少了不兼容的机会(但这个建议可能在未来过时/更改)。有关参考,请参见Conda Forge post在混合通道上
有一些Python库,你不能用简单的conda install安装,因为它们的通道不可用,除非你应用conda-forge。根据我的经验,在查找不同的渠道源时,pip比conda更通用。 例如,如果你想安装python-constraint,你可以通过pip install来安装,但是通过**cond **来安装。你必须指定频道- conda-forge.

conda install -c conda-forge python-constraint // works

但不是

conda install python-constraint

conda-forge频道是您可以找到为conda构建的软件包,但尚未成为官方Anaconda发行版的一部分的地方。

一般来说,你可以使用它们中的任何一个。

Anaconda已经改变了他们的服务条款,所以“重度商业用户”;将不得不支付,其中不包括conda-forge频道。

main通道由Anaconda维护,而conda-forge通道由包的维护者自己维护。每个包都有其优点和缺点。main通道上的包通常是相互兼容的,这意味着你几乎可以安装任何你想要的包,并且不会有依赖冲突。另一方面,conda-forge通道上的包接收更新的速度比main通道快得多,因为维护者自己会将更新推送到通道中。时不时地,Anaconda也会对main通道上可用的包做补丁,这些补丁是由包的维护者完成的,这可能是好的,也可能是坏的,但肯定是维护者无法控制的,他们不支持。

如果你不想为使用付费,你可能会想要坚持使用conda-forge,并且你会接受pypi上可用的版本。如文档中所述:

conda config --add channels conda-forge
conda config --set channel_priority strict
conda install <package-name>

你也可以使用miniforge,它有conda-forge作为默认通道,并支持ppc64le和aarch64平台以及其他常见的平台。

如果你已经安装了conda并且想要删除默认通道,你可以使用

conda config --show channels

要看你的频道,并能使用

conda config --remove channels channel-name

删除一个通道。