【问题标题】:How to prefer `defaults` numpy over `conda-forge` numpy when installing `conda-forge` package安装`conda-forge`包时如何更喜欢`defaults` numpy而不是`conda-forge` numpy
【发布时间】:2017-10-27 13:57:22
【问题描述】:

我更喜欢使用 Continuum 提供的常用 defaults 频道中的 MKL 工具链。不过,像许多人一样,我发现自己从 conda-forge 频道安装了很多软件包。

python-graphviz 包为例。安装命令是

conda install -c conda-forge python-graphviz

这会导致对依赖项的一些不希望的更改

The following packages will be UPDATED:

cvxopt:          1.1.7-py27_0          --> 1.1.9-py27_blas_openblas_201  conda-forge [blas_openblas]
gsl:             2.2.1-h8267d9d_2      --> 2.2.1-blas_openblas_2         conda-forge [blas_openblas]
numpy:           1.13.3-py27hbcc08e0_0 --> 1.13.3-py27_blas_openblas_200 conda-forge [blas_openblas]
scikit-learn:    0.19.1-py27h445a80a_0 --> 0.19.1-py27_blas_openblas_200 conda-forge [blas_openblas]
scipy:           0.19.1-py27h1edc525_3 --> 0.19.1-py27_blas_openblas_202 conda-forge [blas_openblas]

我不想改成OpenBlas numpy,所以我手动处理所有依赖然后

conda install -c conda-forge --no-deps python-graphviz

效果很好,但很费力并且容易出错。

我曾想过如果我将conda-forge 添加为低优先级频道

conda config --append channels conda-forge

然后它将停止尝试覆盖numpy 安装,但事实证明这是不正确的。正如预期的那样,conda config --show 的输出现在包含

channel_alias: https://conda.anaconda.org
channel_priority: True
channels:
  - defaults
  - conda-forge

但如果我尝试使用conda install pycwt 安装一些东西(没有命令行开关),那么我仍然会得到

Package plan for installation in environment /conda:

The following NEW packages will be INSTALLED:

  pycwt:        0.3.0a22-py_0         conda-forge
  tqdm:         4.19.4-py27hdfef72e_0            

The following packages will be UPDATED:

  cvxopt:       1.1.7-py27_0                      --> 1.1.9-py27_blas_openblas_201  conda-forge [blas_openblas]
  gsl:          2.2.1-h8267d9d_2                  --> 2.2.1-blas_openblas_2         conda-forge [blas_openblas]
  numpy:        1.13.3-py27hbcc08e0_0             --> 1.13.3-py27_blas_openblas_200 conda-forge [blas_openblas]
  scikit-learn: 0.19.1-py27h445a80a_0             --> 0.19.1-py27_blas_openblas_200 conda-forge [blas_openblas]
  scipy:        0.19.1-py27h1edc525_3             --> 0.19.1-py27_blas_openblas_202 conda-forge [blas_openblas]

当我安装conda-forge 软件包时,有没有办法让defaultsconda-forge 更新更受欢迎?

编辑:添加了有关conda config 输出和非开关行为的更多信息

【问题讨论】:

  • conda-forge 现在提供了 MKL 构建的 numpy 版本。您的问题特别要求为 MKL 保留默认版本的 numpy ......但另一种解决方案是使用使用 MKL 构建的 conda-forge 版本的 numpy。见github.com/conda-forge/numpy-feedstock/issues/…

标签: numpy packages conda


【解决方案1】:

您可能想使用 conda 配置的pinned_packages 功能。

通过更改/添加这些行来手动编辑您的.condarc 文件(它的位置可以在conda config --show-sources 的输出中看到):

pinned_packages:
  - defaults::numpy

或者从命令行:

conda config --add pinned_packages defaults::numpy

这将确保numpy 将仅从默认频道而不是从 conda-forge 安装/更新。

【讨论】:

    【解决方案2】:

    表达式的直译

    conda-forge 安装 python-graphviz 软件包时,首选 defaults 而不是 conda-forge p>

    conda install -c defaults -c conda-forge conda-forge::python-graphviz
    

    之所以有效,是因为conda 接受多个-c 参数,按顺序给予优先级(第一个最高,最后一个最低)。1conda-forge::覆盖优先级,仅在 conda-forge 频道上查找 python-graphviz

    简单地做也可能就足够了:

    conda install conda-forge::python-graphviz
    

    应该尊重用户配置的频道,除了对指定的包使用 conda-forge


    [1] 您可能需要conda config --set channel_priority strict 才能正常运行。

    【讨论】:

      【解决方案3】:

      将频道添加到安装命令会使该频道成为最高优先级的频道。如果您将conda-forge 通道添加到配置的末尾并且不在安装命令中指定它,您将从匹配它们的第一个通道获取依赖项。

      【讨论】:

      • 这是不正确的。使用conda config --append channels conda-forge 后,安装仍然尝试使用conda-forge 包,尽管--append 标志已将其添加到配置的末尾。我非常同意人们可能预期这种行为,但不幸的是它不是那样工作的。
      • 我的经验是这个答案是正确的。您可以将conda config --show 的输出编辑到问题中吗?我问的原因是因为我想知道你是否也有 conda forge 更高的列表。
      • 感谢您的关注,我已经更新了这个问题。您现在可以看到conda-forge 在底部。
      • 我不确定您的系统发生了什么...这是我的 conda config 输出并安装您提到的第二个软件包:gist.github.com/bryanwweber/0d4c38dbae137dacb2edf9b179c94c19 如您所见,它没有尝试替换 numpy 或任何其他包。 AFAIK,我正在经历的行为以及我在回答中描述的行为是 conda 的预期行为以及自几年前开始使用 conda 以来我注意到的行为......
      • @BrianB 对于它的价值,我刚刚在 Windows 系统上全新安装 Anaconda 时遇到了这个问题,尽管我无法在 Linux 或 macOS 上重现它。我的解决方案是在 install 命令中指定通道,让它降级,然后运行conda update --all,这是一个愚蠢的 hack,但有效。抱歉,我之前不能提供更多帮助!
      猜你喜欢
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多