安装软件包后,Conda冲突无法解决

时间:2019-11-11 07:47:56

标签: python anaconda conda

我正在尝试安装名为Symtopo的软件包,它是所有者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

然后我再次尝试安装软件包,并得到了与以前相同的错误。我不了解这是怎么可能的,因为您可以看到现在已经安装了zlibtkxz。我不确定如何正确解决这些冲突,因为在安装了适当的软件包/版本后,它似乎无济于事。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

疑似原因

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


可能的解决方法

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

  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构建

解决这个问题的另一种方法是enable Pip interoperability in Conda,尽管这是一个相对实验性的功能。该策略将是:

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

我对此进行了测试,并使其与以下YAML一起用作初始环境定义:

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

同样,我会将此环境视为相当脆弱(for the reasons given here),并避免对其进行任何其他安装。

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