python - conda 打包多个环境
问题描述
我正在尝试缩小用于我们的持续集成 (CI) 设置之一的 docker 映像。
我很幸运使用“使用 conda-pack 收缩您的 Conda Docker 图像”,但仅适用于单个 conda 环境。
conda-pack
有没有一种方法可以conda-unpack
用于多种环境?或者以某种方式重建具有多个环境的工作 conda?我想让 CI 中的脚本使用conda run -n some_env command
或conda 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/py38
and /venv/py37
,并且它们是可用的(通过source /venv/pyXX/activate
),但它们不是conda
环境“兄弟姐妹”。它是一个或另一个,我们不能conda activate pyXX
用来从一个切换到另一个。
有没有一种方法可以让所有环境conda-pack
都conda-unpack
被“主人”识别conda
?
解决方案
推荐阅读
- swift - UISwitch 编辑另一个加载视图的值
- vim - 在 vim 上安装 typescript-vim 后的错误
- python - 需要在另一种方法中使用**kw(不是__init__)
- latex - 如何在表格 Latex 中使用逗号设置数字
- robots.txt - 允许文件夹,但不允许特定子文件夹
- ios - Cocoa pods 资源包 xcassets
- node.js - node.js、vue.js 和 express.js 堆栈开发
- java - Groovy - 如何创建带有变量的路径目录
- php - 表单不应包含额外字段 Symfony 4
- python - Python Pandas 2 列关系