代码之家  ›  专栏  ›  技术社区  ›  benjimin

康达·福吉:为什么康达前后矛盾地想要降级NumPy?

  •  6
  • benjimin  · 技术社区  · 6 年前

    我正试图选择CondaForge的软件包(考虑可用性和兼容性)。然而,康达似乎更喜欢其他渠道的核心库版本(如NumPy)。

    例如,当我尝试安装一个新库时,Conda会提供降级NumPy,但如果我要求使用相同的库 和努比 ,康达不再建议降级。为什么?

    $ conda install -c conda-forge beautifulsoup4
    The following NEW packages will be INSTALLED:
        beautifulsoup4: 4.6.3-py36_0 conda-forge
    The following packages will be UPDATED:
        numpy-base: 1.14.3-py36h0ea5e3f_1 --> 1.15.0-py36h3dfced4_0
    The following packages will be DOWNGRADED:
        blas: 1.1-openblas conda-forge --> 1.0-mkl
        numpy: 1.15.1-py36_blas_openblashd3ea46f_1 conda-forge [blas_openblas] --> 1.15.0-py36h1b885b7_0
        scikit-learn: 0.19.2-py36_blas_openblasha84fab4_201 conda-forge [blas_openblas] --> 0.19.1-py36hedc7406_0
        scipy: 1.1.0-py36_blas_openblash7943236_201 conda-forge [blas_openblas] --> 1.1.0-py36hc49cb51_0
    Proceed ([y]/n)? n
    
    $ conda install -c conda-forge beautifulsoup4 numpy
    The following NEW packages will be INSTALLED:
        beautifulsoup4: 4.6.3-py36_0 conda-forge
    Proceed ([y]/n)? y
    

    2 回复  |  直到 6 年前
        1
  •  6
  •   Peter Mortensen venu    6 年前

    这是因为您有两个通道(conda forge和defaults),它们都包含NumPy(及其依赖项),但可能具有不同的版本/内部版本号。

    例如,假设您要安装SciPy(取决于NumPy),世界状态为:

    • 康达锻造:NumPy v1.14和SciPy v1.0

    conda install scipy ,然后Conda将从Conda forge获取SciPy(因为它是最高版本号)。在扫描SciPy的依赖项时,它会注意到默认情况下有一个更新版本的NumPy可用。认为这很有帮助,Conda将从默认值安装更新版本的NumPy,即使您已经从Conda forge安装了它。如果有NumPy依赖的包,那么必须降级才能使其工作,就这样吧。

    conda install scipy numpy conda config --add pinned_packages conda-forge::numpy 您将跳过图形该部分的依赖项查找,这将导致Conda解算器跳到其他通道。

    这是一个相对简单的例子,肯定没有涵盖每天都会出现的所有奇怪的边缘案例。

    这将解决我们一直面临的大量升级/降级问题。

        2
  •  4
  •   benjimin    6 年前

    这并不能真正解释为什么会发生这种情况,但解决办法是:

    $ conda config --add pinned_packages conda-forge::numpy
    
        3
  •  3
  •   rmarin    5 年前

    http://conda-forge.org/docs/user/tipsandtricks.html#multiple-channels

    查看您的渠道和优先级 $conda config --describe channel_priority

    解决方案是添加 conda-forge 频道在您的 .condarc 文件时使用 康达锻造厂 通过以下方式打包并激活严格的通道优先级:

    $ conda config --set channel_priority strict

    康达尔先生

    $ cat .condarc channel_priority: strict channels: - conda-forge - defaults

    除了通道优先级之外,我们建议始终将软件包安装在新环境中,而不是anaconda/miniconda的根环境中。使用env可以更容易地调试包的问题,并确保根env的稳定性。