Як клонувати робоче середовище Python на іншій машині?


26

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

Я не можу зрозуміти, у чому полягає проблема у невдалому випадку (і код програми, і повідомлення про помилку є великим, тому я не в змозі їх тут представити), але я майже впевнений, що це щось із різними версіями залежностей .

Отже, моє запитання полягає в тому, що, враховуючи середовище, де певна програма працює добре, як я можу клонувати її до іншої, де вона також повинна добре працювати? Звичайно, без клонування повної системи;)


Використовуйте експорт conda env.
кбросе

Відповіді:


39

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


Що стосується самого питання - ви можете експортувати ваше середовище Anaconda, використовуючи:

conda env export > environment.yml

І відтворити його, використовуючи:

conda env create -f environment.yml

Зауважте, що, як пропонують інші, ви повинні використовувати віртуальне середовище, яке дозволяє створити певне середовище, яке відокремлене від середовища вашої машини та легше керувати ним.

Для створення віртуального середовища в Анаконда ви можете використовувати:

conda create -n yourenvname python=x.x anaconda

який ви активуєте за допомогою:

source activate yourenvname

Документація 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 createvs conda env create) і які є недоліки кожного (наприклад: "[ conda env createє для] середовищ, в які були встановлені пакети, які використовують pip , що викликає додаткову складність ": яку додаткову складність вона додає?).
Тангуй

Хочу запитати, що під час запуску conda env create -f environment.ymlце призведе до помилки, оскільки ім'я virtenv у файлі yml вже використано. Змініть ім'я на свій новий virtenv, щоб подолати.
Джан Нгуйен

Таким чином рятує ваше життя! якщо ви створюєте середовище з файлу на основі інструкцій сторінки Anaconda Managing Environment, не працює, якщо ви використовуєте іншу платформу. conda list --explicit > FILE_NAMEекспортує бінарні файли для поточної платформи і, мабуть, не працює на іншій.
Шаян Амані

5

Подивіться на "контейнери", наприклад Docker ( https://www.docker.com/what-container ), більш легку альтернативу віртуалізації.

Це зажадає певних витрат часу, але врешті-решт це дасть багато переваг.

За посиланням, де я вказав вашу конкретну потребу жирним курсивом :

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

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


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-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

Це гарантує отримання однакових версій на обох машинах. А оскільки вимоги.txt відслідковуються вашим VCS, ви завжди можете відтворити середовище старої версії коду.

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


Я не помітив anacondaтег у вашому запитанні. Я з цим не переживаю, але будьте обережні. Я думаю, що анаконда має власний спосіб керувати середовищами, використовуючи обидві анаконда, і це virtualenvможе привести вас до неприємностей. Однак, я вважаю, анаконда повинна пропонувати еквівалентні характеристики.
Jérôme


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
Б. Вс

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.