首页 > 解决方案 > conda 打包多个环境

问题描述

我正在尝试缩小用于我们的持续集成 (CI) 设置之一的 docker 映像。

我很幸运使用“使用 conda-pack 收缩您的 Conda Docker 图像”,但仅适用于单个 conda 环境。

conda-pack有没有一种方法可以conda-unpack用于多种环境?或者以某种方式重建具有多个环境的工作 conda?我想让 CI 中的脚本使用conda run -n some_env commandconda activate some_env.

小例子:

Dockerfile

# syntax = docker/dockerfile:1.0-experimental

# build-stage image:
FROM continuumio/miniconda3 AS build
SHELL ["/bin/bash", "-c"]
RUN conda install conda-pack
RUN for v in 3.7 3.8; \
  do \
    p=py${v//\./} && \
    conda create -n $p python=$v && \
    conda install -n $p conda-build && \
    conda-pack -n $p -o /tmp/env.tar && \
    mkdir -p /venv/$p && \
      (cd /venv/$p && tar xf /tmp/env.tar && rm /tmp/env.tar) && \
    /venv/$p/bin/conda-unpack; \
  done

# runtime-stage image
FROM amazonlinux:latest as runtime
CMD [ "/bin/bash" ]
COPY --from=build /venv /venv

# our base will be py38, but we'll have the others as well
RUN source /venv/py38/bin/activate && conda init

然后,之后docker build -t test .

docker run -it test

(base) bash-4.2# python --version
Python 3.8.8
(base) bash-4.2# conda env list
# conda environments:
#
base                  *  /venv/py38

(base) bash-4.2# source /venv/py37/bin/activate 
(py37) bash-4.2# python --version
Python 3.7.10
(py37) bash-4.2# conda env list
# conda environments:
#
base                     /venv/py38

所以,我们确实有/venv/py38and /venv/py37,并且它们是可用的(通过source /venv/pyXX/activate),但它们不是conda环境“兄弟姐妹”。它是一个或另一个,我们不能conda activate pyXX用来从一个切换到另一个。

有没有一种方法可以让所有环境conda-packconda-unpack被“主人”识别conda

标签: pythondockerconda

解决方案


推荐阅读