1. 前言

Conda是Anaconda中一个强大的包和环境管理工具,可以在Windows的Anaconda Prompt命令行使用,也可以在macOS或者Linux系统的终端窗口(terminal window)的命令行使用。本文简单介绍conda的一些常用命令,根据 conda-getting-started编译而成。

!!!注意不要放在C盘占空间,建议使用Miniconda!!!

2. 管理conda自身

2.1 信息查询

1
2
3
conda --version         #查看conda版本
conda config --show #查看conda的环境配置
conda create --help #查询某个命令的帮助

2.2 设置镜像

conda有时候安装软件会非常慢。设置国内镜像的话可以使安装更快捷一些。设置方法如下所示:

1
2
3
4
5
6
7
8
9
10
#设置清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
#设置bioconda
conda config --add channels bioconda
conda config --add channels conda-forge
#设置搜索时显示通道地址
conda config --set show_channel_urls yes

2.4 更新conda

1
2
conda update conda     #将conda自身更新到最新版本
conda update Anaconda #整个Anaconda都更新到确保稳定性和兼容性的最新版本

3. 管理环境

Conda允许你创建相互隔离的独立环境,这些环境被称之为虚拟环境(Virtual Environment),这些环境各自包含属于自己的文件、包以及他们的依存关系,并且不会相互干扰。

Anaconda有一个缺省的名为base的环境。但是不建议把程序放在base环境中,应该创建不同的虚拟环境分别管理不同的开发项目。

这个涉及到一个根本的问题:为什么我们需要虚拟环境呢?举一个简单的例子,想象一下你有多个项目要开发,每个项目中都有一些包要依赖于某个共同的包,但是各自的所需要的版本不一致,有一些需要低版本的,有些需要高版本的,为不同的项目创建虚拟环境就可以把不同项目隔离开来,各自使用自己所需要的软件环境。

3.1 创建虚拟环境

使用conda创建虚拟环境的命令格式为,这表示创建python版本为3.8、名字为env_name的虚拟环境。创建后,env_name文件可以在Anaconda安装目录envs文件下找到。在不指定python版本时,自动创建基于最新python版本的虚拟环境.

1
2
conda create -n env_name python=3.8
conda create -n env_name numpy matplotlib python=3.8 #创建虚拟环境的同时安装必要的包(并不建议这样做)

3.2 查看有哪些虚拟环境

1
2
3
conda env list
conda info -e
conda info --envs

3.4 虚拟环境开关

1
2
3
conda activate env_name  #激活
conda activate #退出
conda deactivate #退出

3.5 删除虚拟环境

1
2
conda remove --name env_name --all           #将该指定虚拟环境及其中所安装的包都删除
conda remove --name env_name  package_name #只删除虚拟环境中的某个或者某些包

3.6 导出环境

很多的软件依赖特定的环境,我们可以导出环境,这样方便自己在需要时恢复环境,也可以提供给别人用于创建完全相同的环境。

1
2
conda env export --name myenv > myenv.yml   #获得环境中的所有配置
conda env create -f myenv.yml #重新还原环境

4. 包(Package)的管理

4.1 查询包的安装情况

1
2
3
conda list   #查询看当前环境中安装了哪些包
conda search package_name #查询当前Anaconda repository中是否有你想要安装的包
conda list pkgname #用conda list后跟package名来查找某个指定的包是否已安装,而且支持*通配模糊查找

4.2 包的安装和更新

1
2
3
4
5
6
conda install package_name   #在当前(虚拟)环境中安装一个包
conda install numpy=0.20.3 #也可以以以下命令安装某个特定版本的包(以下例为安装0.20.3版本的numpy)
conda update numpy #可以用以下命令将某个包更新到它的最新版本

#安装包的时候可以指定从哪个channel进行安装,比如说,以下命令表示不是从缺省通道,而是从conda_forge安装某个包
conda install pkg_name -c conda_forge

4.3 conda卸载包

1
2
conda uninstall package_name  #这样会将依赖于这个包的所有其它包也同时卸载
conda uninstall package_name --force #如果不想删除依赖其当前要删除的包的其他包(不建议,这样会使得你的环境支离破碎)

4.4 清理anaconda缓存

1
2
3
4
conda clean -p      # 删除没有用的包 --packages
conda clean -t # 删除tar打包 --tarballs
conda clean -y -all # 删除所有的安装包及cache(索引缓存、锁定文件、未使用过的包和tar包)
conda clean -h #关于清除命令的更详细的说明

5. Python版本的管理

1
2
3
conda install python=3.5
python --version #更新完后可以用以下命令查看变更是否符合预期
conda update python #将python版本更新到最新版本

6. conda install vs pip install

6.1 有什么区别?

  1. conda可以管理非python包,pip只能管理python包。
  2. conda自己可以用来创建环境,pip不能,需要依赖virtualenv之类的。
  3. conda安装的包是编译好的二进制文件,安装包文件过程中会自动安装依赖包;pip安装的包是wheel或源码,装过程中不会去支持python语言之外的依赖项。
  4. conda安装的包会统一下载到一个目录文件中,当环境B需要下载的包,之前其他环境安装过,就只需要把之间下载的文件复制到环境B中,下载一次多次安装。pip是直接下载到对应环境中。
  5. conda只能在conda管理的环境中使用,例如比如conda所创建的虚环境中使用。pip可以在任何环境中使用,在conda创建的环境 中使用pip命令,需要先安装pip(**conda install pip ),**然后可以 环境A 中使用pip 。conda 安装的包,pip可以卸载,但不能卸载依赖包,pip安装的包,只能用pip卸载。

6.2 能否混用?

首先,不建议混用。混用容易导致库的依赖关系出现混乱,然后突然哪天环境可能就崩了,安装不了新的包,无法进行conda update之类的。

6.3 安装在哪里?

  • conda install xxx:这种方式安装的库都会放在anaconda3/pkgs目录下,这样的好处就是,当在某个环境下已经下载好了某个库,再在另一个环境中还需要这个库时,就可以直接从pkgs目录下将该库复制至新环境而不用重复下载。

  • pip install xxx:分两种情况,一种情况就是当前conda环境的python是conda安装的,和系统的不一样,那么xxx会被安装到anaconda3/envs/current_env/lib/python3.x/site-packages文件夹中,如果当前conda环境用的是系统的python,那么xxx会通常会被安装到~/.local/lib/python3.x/site-packages文件夹中 

6.4 如何判断conda中某个包是通过conda还是pip安装的?

执行​conda list,用pip安装的包显示的build项目为pypi。

7. conda configuration

conda的配置文件为".condarc",该文件在安装时不是缺省存在的。但是当你第一次运行conda config命令时它就被自动创建了。".condarc"配置文件遵循简单的YAML语法。可执行conda info查看文件在哪。

7.1 Channel管理

1
2
3
conda config --add channels conda-forge     #追加conda-forge channel
conda config --remove channels conda-forge #移除conda-forge channel
conda config --get channels #查询当前配置中包含哪些channels