python - 安装软件包后 Conda 冲突未解决

标签 python anaconda conda

我正在尝试安装名为 Symtopo 的软件包这是所有者的 Conda 包 materiae 。该包具有依赖项,当我在其上运行 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。我不确定如何正确解决这些冲突,因为安装适当的软件包/版本后,它似乎没有帮助。

感谢您的帮助!

最佳答案

可疑原因

从您的构建 ID 来看,您正在使用 osx-64 平台。对于所有 osx-64 版本,SymTopo 的依赖项要求看起来很奇怪,具体来说,它们需要 pymatgen=2019.4.11.*,而从搜索 Anaconda Cloud 来看却不需要存在。然而,在 linux-64 版本中,此要求是 pymatgen>=2019.4.11,所以我认为作者做得不正确,因此你可以' t 解析一致的包配置。


可能的解决方法

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

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

无论哪种方式,假设生成的环境将是脆弱的,所以尽量避免任何进一步不必要的安装。

强制安装

如果我们假设 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 )并避免对其进行任何更多安装。

请注意,我发现使用推荐 channel 中的 abipy 会导致冲突,因此我选择仅使用 PyPI 版本。不幸的是,这会导致大量来自 PyPI 的软件包,但它确实安装了所有内容。

关于python - 安装软件包后 Conda 冲突未解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58797363/

相关文章:

python - 关于mongodb更新操作参数safe=True的问题

python - SSHClient.exec_command() 报告 "command not found"

python 嵌套打印出数据框中列的位置和名称

python - Mac 上应该有多少个不同的 macOS 系统默认版本的 Python?

python - 如何在 Django 中的表中添加减法选项

python - 如何在Python中使用长笛乐器从音符制作MIDI文件(music21库)

python - Virtualenv 和 Anaconda 问题

continuous-integration - 通过 conda-forge/conda-install 指定 conda 包的默认版本

python - miniconda 和 Travis,hash -r 是做什么的?

python - pytorch PIP和CONDA错误?