python - 安装软件包后 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
。我不确定如何正确解决这些冲突,因为在安装了适当的包/版本之后,它似乎没有帮助。
谢谢你的帮助!
解决方案
疑似原因
从您的构建 ID 来看,您正在使用osx-64平台。对于所有osx-64构建, SymTopo 的依赖要求看起来很奇怪,特别是它们 require pymatgen=2019.4.11.*
,从搜索 Anaconda Cloud 中根本不存在。然而,在linux-64版本中,这个要求是pymatgen>=2019.4.11
,所以我认为作者做错了,因此你为什么不能解决一个连贯的包配置。
可能的解决方法
除了联系作者并要求他们发布一些工作版本之外,我认为您有两种可能的行动方案:
- 强制安装
- 使用 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 互操作性,尽管这是一个相对实验性的功能。该策略将是:
- 创建一个环境,将所有先决条件安装为 Conda 和 PyPI 包的组合。
- 仅为此 env启用 Pip 互操作性。
- 从 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,但它确实安装了所有东西。
推荐阅读
- python-3.x - 在 azure 函数 v2 中使用 shapely lib - python
- r - 如何使用 tmap 为栅格指定单一颜色?
- java - 当前线程的范围“会话”不活动 - 多线程
- wordpress - AFC - 在评论中显示文件
- python - 从文本片段(块)创建任何算法
- php - 如何模拟未在接口中定义的方法?
- javascript - 点击按钮打开谷歌地图 | 反应
- tensorflow - 创建自定义图层时,Keras 自定义对象的目的是什么?
- java - 为什么在java中将类变量设为私有而将方法设为公有更好
- php - 如何为 apache 2.4.18 安装模块 php7.3