Я пытаюсь создать докер-контейнер, который имеет anaconda и поддерживает записные книжки Jupyter с python 2 и 3. Я создал контейнер на основе официального контейнера 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, я вижу варианты 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
до того, как команды не изменят сообщение об ошибке.
Кроме того, основываясь на этом ТАК вопрос Я пытался:
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:
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