Файл середовища експорту Anaconda


129

Як я можу створити середовище анаконда, який можна використовувати на інших комп'ютерах?

Я експортував своє середовище анаконди пітона в YML за допомогою conda env export > environment.yml. Експортований environment.ymlмістить цей рядок, prefix: /home/superdev/miniconda3/envs/juicyenvякий відображає розташування моєї анаконди, яке буде різним на інших комп'ютерах.


7
Я просто робив тестування, і думав, що визначив, що префікс ігнорується ... не впевнений, чому це в експорті env. Ви повинні бути в змозі зробити це conda env create -f environment.yml як убік, на мій досвід, це не буде працювати на платформах, тому що conda env перелічить багато залежностей, таких як `vs2015_runtime`, якщо ви працюєте в Windows. Але, звичайно, це не доступно на Linux.
Алекс Г Райс

4
Conda насправді рекомендує створити environment.ymlфайл вручну, щоб ви могли його залишити - див. Stackoverflow.com/questions/39280638/…
Brian Burns

Відповіді:


178

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

Зважаючи на це, якщо ви хочете, щоб інший користувач не знав про ваш шлях встановлення за замовчуванням, ви можете видалити рядок префікса, grepперш ніж писати в environment.yml.

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

У будь-якому випадку інший користувач потім працює:

conda env create -f environment.yml

і навколишнє середовище буде встановлено у конвеєрному контурі за умовчанням.

Якщо ви хочете вказати інший шлях встановлення, ніж стандартний для вашої системи (не пов’язаний з "префіксом" у environment.yml), просто використовуйте -pпрапор, за яким слідує необхідний шлях.

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

Зауважте, що Conda рекомендує створити environment.ymlвручну, що особливо важливо, якщо ви хочете ділитися своїм оточенням на різних платформах (Windows / Linux / Mac). У цьому випадку ви можете просто залишити prefixлінію.


1
... яєчниця! 👍
Ахі Туна

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

Приємно, але, здається, це не працює з встановленими на Pip пакетами.
Little Bobby Tables

1
дякую, я щойно оновив на основі наведеної посилання
javac

Я використовував як Anaconda Navigator, так і pip (зсередини) для встановлення речей. Що б ти порадив використовувати? Обидві команди?
DA

Я думаю, що краще використовувати команду conda в середовищі Anaconda, ви також можете використовувати pip, якщо це потрібно
javac

9
  • Linux

    conda env експорт - не будує | grep -v "префікс"> Environment.yml

  • Windows

    conda env експорт - не будує | 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
Я погоджуюсь, що це хороша відповідь, але подумайте, щоб додати деякі деталі щодо того, чому виключати інформацію про збірку корисно для передачі envs через платформи.
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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.