Конфликты Conda не разрешаются после установки пакетов - PullRequest
1 голос
/ 11 ноября 2019

Я пытаюсь установить пакет с именем 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

Затем я снова попытался установить пакет и получил ту же ошибку, что и раньше. Я не понимаю, как это возможно, потому что вы можете видеть, что у меня сейчас, например, установлены zlib, tk, xz. Я не уверен, как правильно разрешить эти конфликты, потому что после установки соответствующих пакетов / версий это, похоже, не помогает.

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 12 ноября 2019

Предполагаемая причина

Судя по вашим идентификаторам сборки, вы работаете с osx-64 платформой. Требования к зависимостям для SymTopo выглядят странно для всех сборок osx-64 , в частности, для них требуется pymatgen=2019.4.11.*, которых при поиске в Anaconda Cloud просто не существует. Однако в сборках linux-64 это требование равно pymatgen>=2019.4.11, поэтому я думаю, что автор сделал это неправильно, поэтому вы не можете разрешить согласованную конфигурацию пакета.


Возможные обходные пути

Кроме того, что вы связываетесь с автором и просите его опубликовать несколько рабочих сборок, я думаю, у вас есть два возможных варианта действий:

  1. Принудительная установка
  2. Использование PyPI Builds

В любом случае, предположите, что результирующий env будет хрупким, поэтому постарайтесь избежать дальнейших ненужных установок в него.

Принудительная установка

Если мы предположим, что pymatgen=2019.4.11.* действительно должно быть pymatgen>=2019.4.11, тогда вы можете просто установить все предварительные требования (см. YAML в следующем разделе), а затем использовать

conda install -n my_env --no-deps materiae::symtopo

Возможно, стоит попробовать,но справка Conda (conda install -h) недвусмысленно предупреждает, что выполнение этого не несет никаких гарантий.

Использование сборок PyPI

Другим способом решения этой проблемы может быть включение взаимодействия Pip вКонда , хотя это относительно экспериментальная функция. Стратегия будет такой:

  1. Создайте env, установив все необходимые компоненты в виде набора пакетов Conda и PyPI.
  2. Включите совместимость Pip только для этого env .
  3. Установите SymTopo из Conda.

Я проверил это и получил его для работы со следующим 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

Опять же, я бы посчитал этот env довольно хрупким ( по причинам, указанным здесь ) и избегайте дальнейших установок.

Обратите внимание, что использование abipy из рекомендованного канала привело к конфликтам, поэтому я решил просто использовать версию PyPI. К сожалению, это приводит к большому количеству пакетов, поступающих из PyPI, но он все устанавливает.

...