我正在尝试安装名为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
然后我再次尝试安装软件包,并得到了与以前相同的错误。我不了解这是怎么可能的,因为您可以看到现在已经安装了zlib
,tk
,xz
。我不确定如何正确解决这些冲突,因为在安装了适当的软件包/版本后,它似乎无济于事。
感谢您的帮助!
答案 0 :(得分:1)
从内部版本ID来看,您正在使用 osx-64 平台。对于所有 osx-64 构建,SymTopo的依赖要求看起来都很奇怪,特别是它们要求pymatgen=2019.4.11.*
,而从搜索Anaconda Cloud来看,这根本不存在。但是,在 linux-64 构建中,此要求是pymatgen>=2019.4.11
,所以我认为作者做错了这一点,因此为什么您不能解析一致的程序包配置。 / p>
除了联系作者并要求他们发布一些可行的版本之外,我认为您有两种可能的行动方案:
无论哪种方式,都假定生成的env易碎,因此请避免在其中进行任何不必要的安装。
如果我们假设pymatgen=2019.4.11.*
实际上应该是pymatgen>=2019.4.11
那么您只需安装所有先决条件(请参阅下一节中的YAML),然后使用
conda install -n my_env --no-deps materiae::symtopo
这可能值得一试,但是Conda帮助(conda install -h
)毫无疑问地警告说,这样做没有任何保证。
解决这个问题的另一种方法是enable Pip interoperability in Conda,尽管这是一个相对实验性的功能。该策略将是:
我对此进行了测试,并使其与以下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,但确实安装了所有程序。