Файл среды экспорта Anaconda

129

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

Я экспортировал свою среду Python anaconda в YML, используя conda env export > environment.yml. Экспортированный environment.ymlсодержит эту строку, prefix: /home/superdev/miniconda3/envs/juicyenvкоторая соответствует местоположению моей анаконды, которое будет отличаться от других компьютеров.

Lau
источник
7
Я просто проводил некоторое тестирование и думал, что обнаружил, что префикс игнорируется ... не уверен, почему он находится в экспорте env. Вы должны быть в состоянии сделать. conda env create -f environment.yml Также, по моему опыту, это не будет работать на разных платформах, потому что conda env будет перечислять многие зависимости, такие как `vs2015_runtime`, если вы работаете в Windows. Но, конечно, это недоступно в Linux.
Alex G Rice
4
На самом деле Conda рекомендует создавать environment.ymlфайл вручную, чтобы вы могли не
Брайан Бернс

Ответы:

179

Я не могу найти в condaспецификациях ничего, что позволяло бы экспортировать файл среды без prefix: ...строки. Однако, как отметил Алекс в комментариях, conda, похоже, не заботится о строке префикса при создании среды из файла.

Имея это в виду, если вы хотите, чтобы другой пользователь не знал вашего пути установки по умолчанию, вы можете удалить строку префикса с помощью grepперед записью в environment.yml.

conda env export | grep -v "^prefix: " > environment.yml

В любом случае другой пользователь запускает:

conda env create -f environment.yml

и среда будет установлена ​​в их путь к среде conda по умолчанию.

Если вы хотите указать путь установки, отличный от пути по умолчанию для вашей системы (не связанный с префиксом в файле environment.yml), просто используйте -pфлаг, за которым следует требуемый путь.

conda env create -f environment.yml -p /home/user/anaconda3/envs/env_name

Обратите внимание, что Conda рекомендует создавать environment.ymlвручную, что особенно важно, если вы хотите поделиться своей средой на разных платформах (Windows / Linux / Mac). В этом случае вы можете просто пропустить prefixстроку.

Эндрю Гай
источник
1
... eggcellent! 👍
Ahi Tuna
44

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

$ conda list -e > req.txt

затем вы можете установить среду, используя

$ conda create -n new environment --file req.txt

если вы используете pip, используйте следующие команды: ссылка https://pip.pypa.io/en/stable/reference/pip_freeze/

$ env1/bin/pip freeze > requirements.txt
$ env2/bin/pip install -r requirements.txt
Javac
источник
Хорошо, но, похоже, он не работает с пакетами, установленными pip.
Little Bobby Tables
1
спасибо, я только что обновил на основе данной ссылки
javac
Для установки я использовал и Anaconda Navigator, и pip (из среды). Что бы вы посоветовали мне использовать? Обе команды?
DA
Я думаю, что лучше использовать команду conda в среде Anaconda, вы также можете использовать pip, если это необходимо
javac
9
  • Linux

    conda env export --no-builds | grep -v "префикс"> environment.yml

  • Windows

    conda env export --no-builds | findstr -v "префикс"> environment.yml


Обоснование: по умолчанию conda env exportвключает информацию о сборке:

$ conda env export
...
dependencies:
  - backcall=0.1.0=py37_0
  - blas=1.0=mkl
  - boto=2.49.0=py_0
...

Вместо этого вы можете экспортировать свою среду без информации о сборке:

$ conda env export --no-builds
...
dependencies:
  - backcall=0.1.0
  - blas=1.0
  - boto=2.49.0
...

Которая отвязывает среду от версии Python и ОС.

Ильяс
источник
1
Я согласен с тем, что это хороший ответ, но подумайте о добавлении некоторых подробностей о том, почему исключение информации о сборке полезно для передачи env между платформами.
merv
В итоге использовал эту, но отличную идею @merv. Так и сделал.
Франсуа Леблан,
К сожалению, это не всегда сработает при установке экспорта и повторной установки в другой ОС.
Сорен,
2

Я считаю, что экспорт пакетов только в строковом формате более переносим, ​​чем экспорт всей condaсреды. Как уже предлагалось в предыдущем ответе:

$ conda list -e > requirements.txt

Однако он requirements.txtсодержит номера сборки, которые нельзя переносить между операционными системами, например между Macи Ubuntu. У conda env exportнас есть опция, --no-buildsно не с conda list -e, поэтому мы можем удалить номер сборки, выполнив следующую команду:

$ sed -i -E "s/^(.*\=.*)(\=.*)/\1/" requirements.txt 

И воссоздаем окружение на другом компьютере:

conda create -n recreated_env --file requirements.txt 
Николь Финни
источник
sedкоманда работала довольно хорошо. Пришлось удалить патч-версию. Так major.minor.patchчтоб major.minorи это сработало. Оказалось, что нижний номер патча был удален из основных репозиториев.
Лукас
1
  1. Сначала активируйте среду conda (ту, которую вы хотите экспортировать / резервировать)
conda activate myEnv
  1. Экспорт всех пакетов в файл (myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
  1. Восстановить / импортировать среду:
conda create --name myEnvRestored --file myEnvBkp.txt
Savrige
источник