如何聚合conda环境?

时间:2019-06-14 22:38:02

标签: python python-3.x python-2.7 anaconda miniconda

我正在尝试提供一个已经设置的项目及其依赖库。

都使用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 个答案:

答案 0 :(得分:1)

  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环境,并不要理会基础环境。然后,您可以将任意数量的项目和程序安装到单独的环境中,而不会干扰彼此。