Conda/Anaconda 笔记

By | 2022年12月12日

Conda 基础

Conda 分为 Anaconda 和 Miniconda,Anaconda 是一个包含了许多常用库的集合版本,Miniconda 是精简版本(只包含conda、pip、zlib、python 以及它们所需的包),剩余的通过 conda install command 命令自行安装即可。

Anaconda 历史发布版列表 | Anaconda 各版本下载地址

Miniconda 历史发布版列表 | Miniconda 各版本下载地址

Anaconda 的安装与卸载比较简单,请看官网教程,装好后 conda 命令是没有的,得执行下 source ~/.bashrc 才可以用。

如果在 Dockerfile 构建镜像时使用了 conda init bash,执行 conda activate xxx 激活时会报错,可以在镜像完成后再激活 xxx。

# 显示 conda 源
conda config --show-sources

# 显示所有已安装的包(即预装的)
conda list

# 查看导入的环境
conda env list
# 激活环境
conda activate <env name>

FAQ

使用 Anaconda 制作的镜像启动容器后切换环境报错

使用 docker run -it --rm b4f bash 进入容器,conda 环境是 base,输入 python 回车,发现不是安装的那个版本,执行 pip list 也没有看到安装的 torch、torchvision 等库。其实这些都是在制作镜像时安装到了 stargan-v2 环境,但使用命令 conda activate stargan-v2 切换到这个环境一直报错:CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'

(1)临时解决办法:

# 进入容器
docker run -it --rm b4f bash
# 重新进入虚拟环境
source activate
# 退出虚拟环境
conda deactivate
# 接着切换就没问题了
conda activate stargan-v2
# 查看当前 conda 环境
conda env list

(2)最终解决办法:

直接修改 dockerfile 文件,添加含有 profile.d 的中间两行,这样当 docker run 进入容器后默认就是 stargan-v2 环境了:

RUN conda create -n stargan-v2 python=3.6.10 &&  \
    ln -s ${CONDA_HOME}/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
    echo ". ${CONDA_HOME}/etc/profile.d/conda.sh" >> ~/.bashrc && \
    echo "conda activate stargan-v2" >> ~/.bashrc

使用 Anaconda 制作的镜像启动容器后默认环境还是 base

上面问题解决后,又来了新问题。若手工用 docker run -it 命令进入容器,当前默认环境确实是打镜像时的 myenv,但在 Dockerfile 中使用 CMD ['python' 'main.py'] 或在 psp-service-compose.yml 中使用 command: python main.py 时,当前 conda 环境却还是 base(python 3.8),实际我 Dockerfile 中的环境是 myenv(python 3.6):

解决办法:添加命令手工激活 conda init bash && . ~/.bashrc && conda activate myenv

services:
  wang-psp-service:
    image: psp:0.0.1
    command: /bin/sh -c "conda init bash && . ~/.bashrc  && conda activate psp_env && python custom_python/main.py"

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注