Я разработал модель машинного обучения с Python (Anaconda + Flask) на моей рабочей станции, и все идет хорошо. Позже я попытался отправить эту программу на другую машину, где, конечно, я пытался настроить ту же среду, но программа не запускалась. Я скопировал программу на другие машины, где она также работает без сбоев.
Я не могу понять, в чем проблема в неудачном случае (и программный код, и сообщение об ошибке обильны, поэтому я не могу представить их здесь), но я почти уверен, что это что-то с различными версиями зависимостей ,
Итак, мой вопрос заключается в том, что в условиях, когда определенная программа работает хорошо, как я могу клонировать ее в другую, где она также должна работать хорошо? Конечно, без клонирования всей системы;)
Ответы:
Прежде всего, это вопрос Python / Anaconda, и его, вероятно, следует задавать на другом сайте обмена стеками.
Что касается самого вопроса - вы можете экспортировать свою среду Anaconda, используя:
И воссоздайте его, используя:
Обратите внимание, что, как предлагали другие, вы должны использовать виртуальные среды, которые позволяют вам создавать определенную среду, отличную от среды вашей машины, и упростить управление ею.
Для создания виртуальной среды в Anaconda вы можете использовать:
который вы активируете, используя:
источник
conda create
илиconda env create
при совместном использовании / воссоздании среды. Не могли бы вы подробнее рассказать, почему вы рекомендуете использоватьconda env create
в этой ситуации?conda create
иconda env create
здесь: groups.google.com/a/continuum.io/forum/#!topic/conda/… Тем не менее, я думаю, что вы обычно можете использовать их взаимозаменяемо.conda create
противconda env create
) должен быть предпочтительным, и каковы недостатки каждой (например: "[conda env create
для] среды, в которой пакеты, использующие pip, были установлены в , что вызывает дополнительную сложность ": какую дополнительную сложность это добавляет?).conda env create -f environment.yml
это приведет к ошибке, потому что имя virtenv в файле yml уже используется. Измените имя на ваш новый virtenv, чтобы преодолеть.conda list --explicit > FILE_NAME
экспортирует двоичные файлы для текущей платформы и, очевидно, не работает на другой.Посмотрите на «контейнеры», например, Docker ( https://www.docker.com/what-container ), более легкую альтернативу виртуализации.
Это потребует некоторых временных затрат, но в итоге принесет много преимуществ.
По ссылке, где я выделил вашу конкретную потребность жирным курсивом :
Пакет программного обеспечения в стандартизированные единицы для разработки, отгрузки и развертывания
Образ контейнера - это легкий, автономный исполняемый пакет программного обеспечения, который включает в себя все необходимое для его запуска: код, среду выполнения, системные инструменты, системные библиотеки, настройки. Контейнерное программное обеспечение, доступное как для Linux, так и для Windows, всегда будет работать одинаково, независимо от среды . Контейнеры изолируют программное обеспечение от его окружения, например, различия между средой разработки и промежуточными средами, и помогают уменьшить конфликты между командами, работающими на разных программах в одной и той же инфраструктуре.
источник
Первая конфигурация среды экспорта вашей текущей среды conda с использованием:
пример:
После выполнения вышеуказанной команды их должен быть файл конфигурации yml в вашем текущем каталоге, который содержит информацию о вашей среде conda
Для создания новой среды с использованием файла конфигурации yml выполните:
пример:
В случае, если вышеперечисленное не работает (из-за различных проблем самой conda), всегда стоит попробовать следующие варианты:
источник
Если ваша программа в основном Python, вы можете полагаться исключительно на виртуальные среды.
Создавайте виртуальные среды для изоляции ваших зависимостей, а не используйте системные библиотеки. Затем используйте инструменты виртуальной среды для дублирования ваших сред.
В рабочем virtualenv создайте файл с версией каждой установленной библиотеки Python:
В новом virtualenv попросите
pip
установить эти библиотеки с той же версией:Это гарантирует, что вы получите одинаковые версии lib на обеих машинах. А так как require.txt отслеживается вашей VCS, вы всегда можете воссоздать среду старой версии вашего кода.
Конечно, если вам нужна база данных, рабочий веб-сервер и т. Д., У вас есть еще несколько шагов, и вы не можете полагаться на virtualenv для обеспечения соответствия обеих сред. Здесь вступает Докер (см . Ответ Pieter21 ).
источник
anaconda
тег на ваш вопрос. Я не опытен с этим, но будь осторожен. Я думаю, что у Анаконды есть свой собственный способ управления средой и использования обоих, и этоvirtualenv
может привести к неприятностям. Тем не менее, я полагаю, что анаконда должна предлагать эквивалентные функции.С самого конца этой страницы документации :
Сохраните пакеты для будущего использования:
Переустановите пакеты из файла экспорта:
источник
Обобщение существующих способов создания среды на основе другого:
Клонирование среды :
Из существующей среды:
$ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME
Из экспортированного файла среды на том же компьютере:
$ conda create --name ENV_NAME —-file FILE_NAME.yml
источник
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
Один лайнер
conda create --clone source_env --name destination_env
источник