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

问题描述 投票:1回答:1

我正在尝试安装名为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。我不确定如何正确解决这些冲突,因为在安装了适当的软件包/版本后,它似乎无济于事。

感谢您的帮助!

python anaconda conda
1个回答
1
投票

疑似原因

从内部版本ID判断,您正在使用osx-64平台。对于所有osx-64构建,SymTopo的依赖性要求看起来很奇怪,特别是,它们要求pymatgen=2019.4.11.*,而从搜索Anaconda Cloud开始就不存在。但是,在linux-64构建中,此要求为pymatgen>=2019.4.11,因此我认为作者没有正确执行此操作,因此,为什么您无法解析一致的程序包配置。]


可能的解决方法

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

  1. 强制安装
  2. 使用PyPI版本
  3. 不管哪种方法,假设生成的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。
  4. 我对此进行了测试,并使其与以下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,但确实安装了所有程序。

热门问题
推荐问题
最新问题