Как агрегировать среды conda? - PullRequest
1 голос
/ 15 июня 2019

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

Оба используют miniconda для определения библиотек.

Вот начальный скрипт:

#!/bin/bash

project_home_path=`dirname $( cd "$(dirname "$0")" ; pwd -P )`
source /home/${USER}/miniconda/etc/profile.d/conda.sh
conda env create -f ${project_home_path}/environment.yml > /dev/null 2>&1
conda activate <env-name>
/home/${USER}/miniconda/bin/app.py & echo $! > /tmp/env-name.pid

Это не сработало, потому что строка conda activate <env-name> не активировалась и не сделала доступными необходимые библиотеки.

После просмотра документации [1] этот скрипт был усовершенствован.

#!/bin/bash

project_home_path=/home/${USER}/folder
source /home/${USER}/miniconda/etc/profile.d/conda.sh
conda env create --force -f ${project_home_path}/project/environment.yml  > /dev/null 2>&1
conda env create --force -f ${project_home_path}/library/environment.yml > /dev/null 2>&1
conda env export -n <project-env> > /tmp/env.yml
conda env update -n base -f /tmp/env.yml > /dev/null 2>&1
conda env export -n <library-env> > /tmp/env.yml
conda env update -n base -f /tmp/env.yml > /dev/null 2>&1
cd /home/${USER}/folder/library && python setup.py install
cd /home/${USER}/folder/project && python setup.py install

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

[1] https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html

1 Ответ

1 голос
/ 20 июня 2019
  1. Создание одной среды, содержащей все необходимые библиотеки и пакеты.
  2. conda env export -n MyOneEnvironment -f everything.yml

Затем для предоставления:

  • conda env create -n TheNewEnvironment -f everything.yml
  • conda activate TheNewEnvironment
  • установите все, что вам нужно, это не пакет conda

После подготовки команду conda activate необходимо повторять каждый раз, когда вы хотите запустить программу в этой среде.

Во втором примере сценария вы создаете две среды из файлов yml, просто чтобы повторно экспортировать список установленных пакетов, а затем установить их в базовую среду. Таким образом, вы работаете с тремя средами.

Если есть требование, что вы должны установить вещи в базовую среду conda, соберите один файл everything.yml со всем необходимым и используйте conda env update -n base --file everything.yml.
Тем не менее, это плохая идея загрязнять базовую среду таким образом. Если вам необходимо установить предварительные условия для проекта или программы, вам следует создать для этого отдельную среду conda и оставить базовую среду в покое. Затем вы можете установить любое количество проектов и программ в отдельных средах, не мешая ни одному из них.

...