如何解释 conda 包冲突?

Mat*_*Olm 10 python anaconda conda

我正在尝试创建一个包含 3 个包和特定 python 版本的 conda 环境,并获得以下输出:

$ conda create -n testing_junk -y instrain awscli samtools python=3.8
Collecting package metadata (current_repodata.json): done
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: |
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.
failed                                                                                                                                                                             \

UnsatisfiableError: The following specifications were found to be incompatible with each other:

Output in format: Requested package -> Available versions

Package ncurses conflicts for:
python=3.8 -> ncurses[version='>=6.1,<6.2.0a0|>=6.2,<7.0a0|>=6.1,<7.0a0']
awscli -> python[version='>=3.8,<3.9.0a0'] -> ncurses[version='5.9.*|5.9|>=6.1,<6.2.0a0|>=6.2,<7.0a0|>=6.1,<7.0a0|>=6.0,<7.0a0|6.0.*']
instrain -> python[version='>=3.4'] -> ncurses[version='5.9.*|5.9|>=6.1,<6.2.0a0|>=6.2,<7.0a0|>=6.1,<7.0a0|>=6.0,<7.0a0|6.0.*']
python=3.8 -> readline[version='>=7.0,<8.0a0'] -> ncurses[version='5.9.*|>=6.0,<7.0a0|6.0.*']
samtools -> ncurses[version='5.9|5.9.*|>=5.9,<5.10.0a0|>=6.1,<6.2.0a0']

Package python conflicts for:
awscli -> python[version='2.7.*|3.5.*|3.6.*|>=2.7,<2.8.0a0|>=3.6,<3.7.0a0|>=3.7,<3.8.0a0|>=3.8,<3.9.0a0|>=3.5,<3.6.0a0|3.4.*']
python=3.8
instrain -> biopython -> python[version='2.7.*|3.5.*|3.6.*|>=2.7,<2.8.0a0|>=3.6,<3.7.0a0|>=3.8,<3.9.0a0|>=3.7,<3.8.0a0|>=3.5,<3.6.0a0|3.4.*|>3|>=3.5|<3.0.0|>=3.6']
instrain -> python[version='>=3.4']
awscli -> python_abi=3.8[build=*_cp38] -> python[version='3.7.*|3.8.*']

Package ca-certificates conflicts for:
samtools -> openssl[version='>=1.1.1a,<1.1.2a'] -> ca-certificates
python=3.8 -> openssl[version='>=1.1.1g,<1.1.2a'] -> ca-certificates
awscli -> python[version='>=2.7,<2.8.0a0'] -> ca-certificates

Package setuptools conflicts for:
python=3.8 -> pip -> setuptools
instrain -> matplotlib-base -> setuptools[version='>=40.0']

Package libgcc-ng conflicts for:
samtools -> ncurses[version='>=6.1,<6.2.0a0'] -> libgcc-ng[version='>=7.2.0']
samtools -> libgcc-ng[version='>=4.9|>=7.3.0']

Package pypy3.6 conflicts for:
instrain -> numpy -> pypy3.6[version='7.3.0.*|7.3.1.*|>=7.3.1']
awscli -> python[version='>=3.6,<3.7.0a0'] -> pypy3.6[version='7.3.*|7.3.0.*|7.3.1.*']

Package bzip2 conflicts for:
samtools -> bzip2[version='1.0.*|>=1.0.6,<2.0a0|>=1.0.8,<2.0a0']
instrain -> pysam -> bzip2[version='>=1.0.6,<2.0a0|>=1.0.8,<2.0a0']
awscli -> python[version='>=3.7,<3.8.0a0'] -> bzip2[version='>=1.0.6,<2.0a0|>=1.0.8,<2.0a0']

Package zlib conflicts for:
samtools -> zlib[version='1.2.11.*|>=1.2.11,<1.3.0a0|1.2.8.*|1.2.8']
samtools -> curl[version='>=7.59.0,<8.0a0'] -> zlib[version='1.2.*|1.2.11']

Package samtools conflicts for:
samtools
instrain -> pysam -> samtools[version='1.3|1.3.1.*|1.3.1|1.5.*|1.6.*|1.7|1.7.*|1.9.*|>=1.4.1|>=1.4.1,<1.5|>=1.4,<1.5|>=1.3,<1.4|>=1.3']

Package openssl conflicts for:
samtools -> curl[version='>=7.59.0,<8.0a0'] -> openssl[version='1.0.*|>=1.0.2o,<1.0.3a|>=1.0.2m,<1.0.3a']
samtools -> openssl[version='>=1.0.2p,<1.0.3a|>=1.0.2r,<1.0.3a|>=1.1.1a,<1.1.2a']

Package _libgcc_mutex conflicts for:
samtools -> libgcc-ng[version='>=7.3.0'] -> _libgcc_mutex[version='*|0.1',build='main|conda_forge']
python=3.8 -> libgcc-ng[version='>=7.5.0'] -> _libgcc_mutex[version='*|0.1',build='main|conda_forge']The following specifications were found to be incompatible with your CUDA driver:

  - feature:/linux-64::__cuda==10.2=0
  - feature:|@/linux-64::__cuda==10.2=0

Your installed CUDA driver is: 10.2
Run Code Online (Sandbox Code Playgroud)

我知道软件包之间存在一些冲突,但我无法解释此输出以了解问题所在。

例如,在查看第一个冲突块(与 相关ncurses)时,6.1 版不应该满足列出的所有要求吗?

另外,对于 package 块setuptools,我根本看不出任何问题?

任何有关如何解释这些冲突以便我可以尝试解决它们的见解将不胜感激。

mer*_*erv 34

一些实用的建议

@Quantum7 的答案对 Conda 的冲突报告进行了很好的字面解释。然而,我想提供一个更实际的观点,即Conda 的这个“功能”太不具体,无法在大多数重要环境中发挥作用。有时它甚至不包括潜在的冲突。不要浪费你的时间!

Conda 的冲突报告通常没有帮助

从表面上看,康达试图报告所有可能的冲突根源。也就是说,依赖图中从显式规范开始并以同一包结束的所有路径集。据报道,这相当于大部分内容是无害的,并且坦率地说是分散注意力的。例如,zlib“冲突”:

Package zlib conflicts for:
samtools -> zlib[version='1.2.11.*|>=1.2.11,<1.3.0a0|1.2.8.*|1.2.8']
samtools -> curl[version='>=7.59.0,<8.0a0'] -> zlib[version='1.2.*|1.2.11']
Run Code Online (Sandbox Code Playgroud)

由于samtools依赖于zlib直接和间接(通过 介导curl),因此这会出现两条导致约束的替代路径。问题是最终约束的交集不为空,因此这里没有不兼容的地方。

此外,在某些情况下,报告的内容都不冲突(例如,this Questionthis one),这意味着解析输出可能完全是浪费时间。

尝试曼巴

相反,如果人们真正关心解决冲突,我发现 Mamba 的工作效率更高,无论是速度还是精度。

Package zlib conflicts for:
samtools -> zlib[version='1.2.11.*|>=1.2.11,<1.3.0a0|1.2.8.*|1.2.8']
samtools -> curl[version='>=7.59.0,<8.0a0'] -> zlib[version='1.2.*|1.2.11']
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个例子现在只能运行。然而,还有其他问题比较 Conda 和 Mamba 不满足性报告,例如这个问题

  • 很好地解释了为什么 conda 在这里如此过于冗长,并为 mamba 推荐+1! (2认同)
  • 使用曼巴是一个很好的技巧!就我而言,它将 conda 输出的难以理解的潜在冲突列表减少为单个项目。 (2认同)

Qua*_*um7 17

这里描述了软件包版本规范,但重要的部分是:

  • ,代表AND,优先级最高
  • |代表 OR 并且具有第二优先级
  • Alpha 版本(例如“6.2.0a0”)用于上限,因为它们是该版本的第一个可能版本

作为示例,请考虑 ncurses 组的第一行:

python=3.8 -> ncurses[version='>=6.1,<6.2.0a0|>=6.2,<7.0a0|>=6.1,<7.0a0']
Run Code Online (Sandbox Code Playgroud)

这表明您请求的 python=3.8 取决于具有以下版本的 ncurses:

  • >=6.1,<6.2.0a0版本 6.1*
  • >=6.2,<7.0a0版本 6.2*
  • OR >=6.1,<7.0a0(冗余)至少 6.1 但不高至 7.0

这些列表很难阅读,因为它们包含许多不必要的限制。但是,也没有发现与您的版本有任何真正的冲突。不相信我自己检查包规范的能力,我找到了直接执行此操作的 conda 包:

>>> from conda.models import version as cv
>>> cv.VersionSpec(">=6.1,<6.2.0a0|>=6.2,<7.0a0|>=6.1,<7.0a0").match("6.1")
True
Run Code Online (Sandbox Code Playgroud)

在您报告的所有冲突上运行此命令,我能够找到满足所有规定版本要求的版本:https://gist.github.com/sbliven/aab43e1f0bce1f4ac63aaaaa718df0b3

我唯一无法测试的部分是 cuda 部分,但看起来您确实有支持 CUDA 10.2 的显卡。

当我开始回答这个问题时,我正在准备解释 SAT 求解器(例如 conda 中使用的求解器)如何迭代添加约束,以及这如何导致看似有效的约束作为冲突输出。但是,总会有一些冲突,所以我认为你的问题一定出在其他地方

由于 samtools 似乎已从 conda-forge 中删除,我无法自己重现该示例,因此我对您所看到的确切错误感到困惑。希望理解版本字符串对将来有所帮助。

编辑:当然,samtools来自bioconda而不是conda-forge!以下命令对我有用:

conda create -n testing_junk -c bioconda -y instrain awscli samtools python=3.8
Run Code Online (Sandbox Code Playgroud)

它解决了这些软件包版本(也许自您发布问题以来某些内容已修复):

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    asteval-0.9.16             |     pyh5ca1d4c_0          18 KB  conda-forge
    awscli-1.18.221            |   py38h50d1736_0         1.8 MB  conda-forge
    biopython-1.74             |   py38h0b31af3_0         2.5 MB  conda-forge
    blas-2.14                  |         openblas          10 KB  conda-forge
    boost-1.70.0               |   py38hbf1eeb5_1         347 KB  conda-forge
    boost-cpp-1.70.0           |       hef959ae_3        18.9 MB  conda-forge
    botocore-1.19.61           |     pyhd8ed1ab_0         4.5 MB  conda-forge
    brotlipy-0.7.0             |py38h5406a74_1001         357 KB  conda-forge
    c-ares-1.11.0              |                0          73 KB  bioconda
    capnproto-0.6.1            |       h0ceac7d_2         2.4 MB  conda-forge
    cffi-1.14.4                |   py38h979bc6b_1         219 KB  conda-forge
    colorama-0.4.3             |             py_0          17 KB  conda-forge
    cryptography-3.3.1         |   py38h6b4ec92_1         614 KB  conda-forge
    docutils-0.15.2            |   py38h50d1736_1         739 KB  conda-forge
    drep-3.0.0                 |             py_2          59 KB  bioconda
    fastani-1.32               |       he69ab0f_0         151 KB  bioconda
    future-0.18.2              |   py38h50d1736_3         715 KB  conda-forge
    hdf5-1.10.6                |nompi_h34ad4e8_1111         3.0 MB  conda-forge
    htslib-1.11                |       h422799e_1         1.5 MB  bioconda
    idna-3.1                   |     pyhd3deb0d_0          52 KB  conda-forge
    instrain-1.4.0             |             py_0         380 KB  bioconda
    jmespath-0.10.0            |     pyh9f0ad1d_0          21 KB  conda-forge
    joblib-1.0.0               |     pyhd8ed1ab_0         206 KB  conda-forge
    kiwisolver-1.3.1           |   py38hd9c93a9_1          57 KB  conda-forge
    libblas-3.8.0              |      14_openblas          10 KB  conda-forge
    libcblas-3.8.0             |      14_openblas          10 KB  conda-forge
    libdeflate-1.6             |       h0b31af3_0          61 KB  conda-forge
    liblapack-3.8.0            |      14_openblas          10 KB  conda-forge
    liblapacke-3.8.0           |      14_openblas          10 KB  conda-forge
    libnghttp2-1.41.0          |       h8a08a2b_1         736 KB  conda-forge
    libopenblas-0.3.7          |       h3d69b6c_4         8.2 MB  conda-forge
    llvm-openmp-8.0.1          |       h770b8ee_0         253 KB  conda-forge
    llvmlite-0.34.0            |   py38h3707e27_2         247 KB  conda-forge
    lmfit-1.0.1                |             py_1          69 KB  conda-forge
    mash-2.2.2                 |       h194473e_2         449 KB  bioconda
    matplotlib-base-3.3.4      |   py38hb24f337_0         6.8 MB  conda-forge
    mummer4-4.0.0rc1           |  pl526h4a8c4bd_0         699 KB  bioconda
    numba-0.51.2               |   py38h6be0db6_0         3.5 MB  conda-forge
    openmp-8.0.1               |                0           8 KB  conda-forge
    pandas-1.2.1               |   py38he9f00de_0        10.6 MB  conda-forge
    pillow-8.1.0               |   py38hc1d52f7_1         646 KB  conda-forge
    pluggy-0.13.1              |   py38h50d1736_4          29 KB  conda-forge
    prodigal-2.6.3             |       h01d97ff_2         397 KB  bioconda
    psutil-5.8.0               |   py38h5406a74_1         350 KB  conda-forge
    pyasn1-0.4.8               |             py_0          53 KB  conda-forge
    pysam-0.16.0.1             |   py38hb3e8b06_1         2.1 MB  bioconda
    pysocks-1.7.1              |   py38h50d1736_3          27 KB  conda-forge
    pytest-6.2.2               |   py38h50d1736_0         432 KB  conda-forge
    pyyaml-5.3.1               |   py38h5406a74_2         173 KB  conda-forge
    rsa-4.4.1                  |     pyh9f0ad1d_0          27 KB  conda-forge
    s3transfer-0.3.4           |     pyhd8ed1ab_0          51 KB  conda-forge
    samtools-1.11              |       h725deca_0         381 KB  bioconda
    scikit-learn-0.22.1        |   py38hebd9d1a_0         4.7 MB
    scipy-1.5.3                |   py38h352ea5d_0        19.1 MB  conda-forge
    seaborn-0.11.1             |       hd8ed1ab_1           4 KB  conda-forge
    seaborn-base-0.11.1        |     pyhd8ed1ab_1         217 KB  conda-forge
    statsmodels-0.12.1         |   py38hc7193ba_2        10.5 MB  conda-forge
    tornado-6.1                |   py38h5406a74_1         643 KB  conda-forge
    uncertainties-3.1.5        |     pyhd8ed1ab_0          75 KB  conda-forge
    ------------------------------------------------------------
                                           Total:       110.1 MB
Run Code Online (Sandbox Code Playgroud)