Как клонировать рабочую среду Python на другой машине?

26

Я разработал модель машинного обучения с Python (Anaconda + Flask) на моей рабочей станции, и все идет хорошо. Позже я попытался отправить эту программу на другую машину, где, конечно, я пытался настроить ту же среду, но программа не запускалась. Я скопировал программу на другие машины, где она также работает без сбоев.

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

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

Хендрик
источник
Используйте conda env export.
kbrose

Ответы:

39

Прежде всего, это вопрос Python / Anaconda, и его, вероятно, следует задавать на другом сайте обмена стеками.


Что касается самого вопроса - вы можете экспортировать свою среду Anaconda, используя:

conda env export > environment.yml

И воссоздайте его, используя:

conda env create -f environment.yml

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

Для создания виртуальной среды в Anaconda вы можете использовать:

conda create -n yourenvname python=x.x anaconda

который вы активируете, используя:

source activate yourenvname
Ginge
источник
Документация Anaconda не очень понятна для использования в среде conda createили conda env createпри совместном использовании / воссоздании среды. Не могли бы вы подробнее рассказать, почему вы рекомендуете использовать conda env createв этой ситуации?
Танги
Вы можете найти некоторые заметки о разнице между conda createи conda env createздесь: groups.google.com/a/continuum.io/forum/#!topic/conda/… Тем не менее, я думаю, что вы обычно можете использовать их взаимозаменяемо.
ginge
1
Я видел этот поток, но именно я пытаюсь точно понять, в какой ситуации каждый вариант ( conda createпротив conda env create) должен быть предпочтительным, и каковы недостатки каждой (например: "[ conda env createдля] среды, в которой пакеты, использующие pip, были установлены в , что вызывает дополнительную сложность ": какую дополнительную сложность это добавляет?).
Танги
Я хочу спросить, что при запуске conda env create -f environment.ymlэто приведет к ошибке, потому что имя virtenv в файле yml уже используется. Измените имя на ваш новый virtenv, чтобы преодолеть.
Гианг Нгуен
Этот путь спасает вашу жизнь! если вы создаете среду из файла на основе инструкций на странице Anaconda Managing Environments, она не будет работать, если вы используете другую платформу. conda list --explicit > FILE_NAMEэкспортирует двоичные файлы для текущей платформы и, очевидно, не работает на другой.
Шаян Амани
5

Посмотрите на «контейнеры», например, Docker ( https://www.docker.com/what-container ), более легкую альтернативу виртуализации.

Это потребует некоторых временных затрат, но в итоге принесет много преимуществ.

По ссылке, где я выделил вашу конкретную потребность жирным курсивом :

Пакет программного обеспечения в стандартизированные единицы для разработки, отгрузки и развертывания

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

Pieter21
источник
5

Первая конфигурация среды экспорта вашей текущей среды conda с использованием:

conda-env  export -n your_env_name > your_env_name.yml

пример:

conda-env  export -n base> base.yml

После выполнения вышеуказанной команды их должен быть файл конфигурации yml в вашем текущем каталоге, который содержит информацию о вашей среде conda

Для создания новой среды с использованием файла конфигурации yml выполните:

conda-env create -n new_env -f=\path\to\base.yml 

пример:

conda-env create -n venv -f=base.yml

В случае, если вышеперечисленное не работает (из-за различных проблем самой conda), всегда стоит попробовать следующие варианты:

conda-env create --name new_env --file \path\to\base.yml 
Мухаммед Умар Аманат
источник
4

Если ваша программа в основном Python, вы можете полагаться исключительно на виртуальные среды.

Создавайте виртуальные среды для изоляции ваших зависимостей, а не используйте системные библиотеки. Затем используйте инструменты виртуальной среды для дублирования ваших сред.

В рабочем virtualenv создайте файл с версией каждой установленной библиотеки Python:

pip freeze > requirements.txt

В новом virtualenv попросите pipустановить эти библиотеки с той же версией:

pip install -r requirements.txt

Это гарантирует, что вы получите одинаковые версии lib на обеих машинах. А так как require.txt отслеживается вашей VCS, вы всегда можете воссоздать среду старой версии вашего кода.

Конечно, если вам нужна база данных, рабочий веб-сервер и т. Д., У вас есть еще несколько шагов, и вы не можете полагаться на virtualenv для обеспечения соответствия обеих сред. Здесь вступает Докер (см . Ответ Pieter21 ).

Жером
источник
Я не заметил anacondaтег на ваш вопрос. Я не опытен с этим, но будь осторожен. Я думаю, что у Анаконды есть свой собственный способ управления средой и использования обоих, и это virtualenvможет привести к неприятностям. Тем не менее, я полагаю, что анаконда должна предлагать эквивалентные функции.
Жером
1

С самого конца этой страницы документации :

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

conda list --export > package-list.txt

Переустановите пакеты из файла экспорта:

conda create -n myenv --file package-list.txt
Miladiouss
источник
1

Обобщение существующих способов создания среды на основе другого:

  • Клонирование среды :

    • Из существующей среды:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • Из экспортированного файла среды на том же компьютере:

      $ conda create --name ENV_NAME —-file FILE_NAME.yml

    • Из экспортированного файла среды на другом компьютере:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```
      
Шаян Амани
источник
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
Б. Вс
0

Один лайнер

conda create --clone source_env --name destination_env

salhin
источник