首页 > 解决方案 > 安装软件包后 Conda 冲突未解决

问题描述

我正在尝试安装一个名为Symtopo的包,它是来自 owner materiae的 Conda 包。该包具有依赖关系,当我在其上运行conda install时,会导致此错误(我当前的 Conda 环境正在运行 Python 3.7.4):

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

Package openssl conflicts for:
python=3.7.4 -> openssl[version='>=1.1.1c,<1.1.2a']
Package phonopy conflicts for:
symtopo -> phonopy=2.1.3
Package ncurses conflicts for:
python=3.7.4 -> ncurses[version='>=6.1,<7.0a0']
Package sqlite conflicts for:
python=3.7.4 -> sqlite[version='>=3.29.0,<4.0a0']
Package libcxx conflicts for:
python=3.7.4 -> libcxx[version='>=4.0.1']
Package h5py conflicts for:
symtopo -> h5py=2.9.0
Package pymatgen conflicts for:
symtopo -> pymatgen=2019.4.11
Package libffi conflicts for:
python=3.7.4 -> libffi[version='>=3.2.1,<4.0a0']
Package xz conflicts for:
python=3.7.4 -> xz[version='>=5.2.4,<6.0a0']
Package readline conflicts for:
python=3.7.4 -> readline[version='>=7.0,<8.0a0']
Package pip conflicts for:
python=3.7.4 -> pip
Package tk conflicts for:
python=3.7.4 -> tk[version='>=8.6.8,<8.7.0a0']
Package abipy conflicts for:
symtopo -> abipy=0.6.0
Package zlib conflicts for:
python=3.7.4 -> zlib[version='>=1.2.11,<1.3.0a0']

我最初在一个完全干净的 Conda 环境中工作。创建后,我运行conda list并没有安装任何软件包。收到这些错误后,我拿了一些包并将它们放入需求文件并在它们上运行安装。我conda list现在的结果是:

ca-certificates           2019.9.11            hecc5488_0    conda-forge
certifi                   2019.9.11                py37_0    conda-forge
libcxx                    4.0.1                hcfea43d_1    conda-forge
libcxxabi                 4.0.1                hcfea43d_1
libedit                   3.1.20181209         hb402a30_0
libffi                    3.2.1             h6de7cb9_1006    conda-forge
ncurses                   6.1                  h0a44026_1
openssl                   1.1.1c               h01d97ff_0    conda-forge
pip                       19.3.1                   py37_0
python                    3.7.4                h359304d_1
readline                  7.0               hcfe32e1_1001    conda-forge
setuptools                41.6.0                   py37_0
sqlite                    3.29.0               ha441bb4_0
tk                        8.6.8                ha441bb4_0
wheel                     0.33.6                   py37_0
xz                        5.2.4             h1de35cc_1001    conda-forge
zlib                      1.2.11            h0b31af3_1006    conda-forge

然后我再次尝试安装该软件包并得到与之前相同的错误。我不明白这是怎么可能的,因为你可以看到我现在已经安装了,zlib例如tk,、、、xz。我不确定如何正确解决这些冲突,因为在安装了适当的包/版本之后,它似乎没有帮助。

谢谢你的帮助!

标签: pythonanacondaconda

解决方案


疑似原因

从您的构建 ID 来看,您正在使用osx-64平台。对于所有osx-64构建, SymTopo 的依赖要求看起来很奇怪,特别是它们 require pymatgen=2019.4.11.*,从搜索 Anaconda Cloud 中根本不存在。然而,在linux-64版本中,这个要求是pymatgen>=2019.4.11,所以我认为作者做错了,因此你为什么不能解决一个连贯的包配置。


可能的解决方法

除了联系作者并要求他们发布一些工作版本之外,我认为您有两种可能的行动方案:

  1. 强制安装
  2. 使用 PyPI 构建

无论哪种方式,假设生成的 env 将是脆弱的,因此请尽量避免在其中进行任何进一步不必要的安装。

强制安装

如果我们假设pymatgen=2019.4.11.*真的应该是pymatgen>=2019.4.11 ,那么您可以只安装所有先决条件(请参阅下一节中的 YAML),然后使用

conda install -n my_env --no-deps materiae::symtopo

这可能值得一试,但 Conda 帮助 ( conda install -h) 毫不含糊地警告说,这样做并不能保证。

使用 PyPI 构建

解决此问题的另一种方法可能是在 Conda 中启用 Pip 互操作性,尽管这是一个相对实验性的功能。该策略将是:

  1. 创建一个环境,将所有先决条件安装为 Conda 和 PyPI 包的组合。
  2. 仅为此 env启用 Pip 互操作性。
  3. 从 Conda 安装 SymTopo。

我对此进行了测试,并让它与以下 YAML 一起使用作为初始 env 定义:

symtopo-prereqs.yaml

name: symtopo_env
channels:
 - conda-forge
 - defaults
dependencies:
 - python=3.7
 - h5py=2.9.0
 - phonopy=2.1.3
 - pip
 - pip:
   - abipy==0.6.0
   - pymatgen==2019.4.11

然后命令是:

conda env create -f symtopo-prereqs.yaml
conda activate symtopo_env
conda config --env --set pip_interop_enabled true
conda install materiae::symtopo

同样,我认为这个环境非常脆弱(出于此处给出的原因),并避免对其进行更多安装。

请注意,我发现使用abipy推荐频道会导致冲突,因此我选择仅使用 PyPI 版本。不幸的是,这导致很多包来自 PyPI,但它确实安装了所有东西。


推荐阅读