У меня есть среда под названием envname
, но я бы хотел, чтобы ее пакеты были доступны в среде base
. Как это сделать без переустановки каждого из них?
Как скопировать все пакеты Conda из одного env в базовый?
Ответы (1)
Слово предостережения
Будьте очень осторожны при использовании base env. Здесь находится пакет conda
, поэтому, если он сломается, установка Conda прервется. Это очень утомительная ситуация для восстановления, поэтому я обычно не рекомендую использовать base env. для чего угодно, кроме запуска conda update -n base conda
.
Тем не менее, следует попробовать только следующее для совместного использования двумя не базовыми env.
Копирование (связывание) пакетов через Envs
Один из способов - экспортировать env, назовем его foo, как YAML:
conda env export -n foo > foo.yaml
Затем попросите другой env, назовем его bar, попытаться установить все пакеты:
Предупреждение: Conda попытается выполнить следующую команду без запроса одобрения!
conda env update -n bar -f foo.yaml
Обратите внимание, что если в окружении foo есть конфликтующие пакеты, все они заменят все, что было в окружении bar (если это возможно). Чтобы быть осторожным, вам, вероятно, сначала следует провести сравнение, чтобы увидеть, что будет перезаписано. Например.,
conda env export -n bar > bar.yaml # this is also useful as backup
diff -u bar.yaml foo.yaml
Главное, что нужно проверить, - это версия python
. Они должны соответствовать младшей версии включительно (например, 3.6.x
и 3.6.y
допустимы; 3.6
и 3.7
- нет).
Чтобы ошибиться из соображений осторожности, вероятно, следует вручную удалить из YAML все пакеты, которые могут быть реверсиями, однако это может привести к конфликтам.
Удаление не будет иметь эффекта , если также не будет использоваться аргумент --prune
(по сути, это полностью перезапишет bar на foo).
Надеюсь, все эти оговорки и предупреждения дают понять: это может быть беспорядок. Обычно лучше с самого начала продуманно разработать новый env.