Conda 和 Anaconda
Conda 是一个独立的工具,可以单独安装使用,适用于那些只需要一个轻量级包管理器和环境管理器的用户。
Anaconda 则是一个包含了 Conda 的更大规模的数据科学平台,提供了更多的工具和服务,适合需要一个完整解决方案的用户。
如果您只需要一个简单的包管理器,Conda 可能就足够了。即使您不使用完整的 Anaconda 发行版,也可以单独安装 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"