【发布时间】:2019-10-18 01:37:11
【问题描述】:
我正在尝试创建一个具有 anaconda 并支持带有 python 2 和 3 的 Jupyter 笔记本的 docker 容器。我创建了一个基于官方 anaconda python 3 容器的容器,如下所示:
FROM continuumio/anaconda3:latest
WORKDIR /app/
COPY requirements.txt /app/
RUN pip install --upgrade pip && \
pip install -r requirements.txt
一旦在容器上,我可以通过输入以下命令让 python 2 和 3 与 Jupyter 笔记本一起工作:
conda create -y -n py2 python=2.7
conda activate py2
conda install -y notebook ipykernel
ipython kernel install --user
conda deactivate
然后当我回到基地并运行jupyter kernelspec list 时,我看到了:
(base) root@1683850aacf0:/app# jupyter kernelspec list
Available kernels:
python2 /root/.local/share/jupyter/kernels/python2
python3 /root/.local/share/jupyter/kernels/python3
当我打开一个 jupyter notebook 服务器时,我看到了 python 2 和 3 选项。这就是我想要达到的状态。我试图将所有这些都变成 docker 命令,如下所示:
RUN conda create -y -n py2 python=2.7
RUN conda activate py2
RUN conda install -y notebook ipykernel
RUN ipython kernel install --user
RUN conda deactivate
但运行命令来激活或停用 (RUN conda activate py2) conda 环境会给我一个错误:
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run
$ conda init <SHELL_NAME>
Currently supported shells are:
- bash
- fish
- tcsh
- xonsh
- zsh
- powershell
在命令前添加RUN conda init bash 不会更改错误消息。
另外,基于这个SO question我试过了:
RUN conda create -y -n py3 python=3.7 ipykernel
RUN conda create -y -n py2 python=2.7 ipykernel
但是在我构建并进入容器之后,我只看到了 python 3 环境:
(base) root@b301d8ab5f1e:/app# jupyter kernelspec list
Available kernels:
python3 /opt/conda/share/jupyter/kernels/python3
我可以激活 py2 并查看该内核,但不能同时查看:
(py2) root@b301d8ab5f1e:/app# jupyter kernelspec list
Available kernels:
python2 /opt/conda/envs/py2/share/jupyter/kernels/python2
我还应该尝试什么?
编辑:
我尝试按照 Adiii 的建议指定 shell:
FROM continuumio/anaconda3:latest
WORKDIR /app/
COPY requirements.txt /app/
RUN pip install --upgrade pip && \
pip install -r requirements.txt
ENV BASH_ENV ~/.bashrc
SHELL ["/bin/bash", "-c"]
RUN conda create -y -n py2 python=2.7
RUN conda activate py2
RUN conda install -y notebook ipykernel
RUN ipython kernel install --user
RUN conda deactivate
这允许构建容器,但由于某种原因没有 python 2.7 环境:
(base) root@31169f698f14:/app# jupyter kernelspec list
Available kernels:
python3 /root/.local/share/jupyter/kernels/python3
(base) root@31169f698f14:/app# conda info --envs
# conda environments:
#
base * /opt/conda
py2 /opt/conda/envs/py2
(base) root@31169f698f14:/app# conda activate py2
(py2) root@31169f698f14:/app# jupyter kernelspec list
Available kernels:
python3 /root/.local/share/jupyter/kernels/python3
【问题讨论】:
-
有趣的方法,但这看起来不包括 Anaconda
标签: python docker jupyter-notebook anaconda