一、什么是 conda ?
conda 是开源包(packages)和虚拟环境(environment)的管理系统。
-
packages 管理:可以使用 conda 来安装、更新 、卸载工具包 ,并且它更关注于数据科学相关的工具包。在安装 anaconda 时就预先集成了像 Numpy、Scipy、 pandas、Scikit-learn 这些在数据分析中常用的包。另外值得一提的是,Conda 是为 Python 程序创建的(所以 conda对python的版本非常敏感,尤其是base环境下的python版本,conda的启动依赖于base环境下的python版本,所以安装软件或者更新python版本,建议仅仅在env中进行操作),适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。比如在新版的 Anaconda 中就可以安装R语言的集成开发环境 Rstudio
-
environment管理:在conda中可以建立多个虚拟环境,用于隔离不同项目所需的不同版本的工具包,以防止版本上的冲突。对纠结于 Python 版本的同学们,我们也可以建立 Python2 和 Python3 两个环境,来分别运行不同版本的 Python 代码。
-
版本: conda分为anaconda和miniconda。anaconda是包含一些常用包的版本(包括numpy, sklearn, pandas等),miniconda则是精简版,需要啥装啥,所以推荐使用miniconda。
二、minconda安装与管理
- miniconda版本选择
miniconda官网:https://conda.io/miniconda.html
- 选择适合自己的版本,用wget命令下载
wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
这个版本是适合于linux的,要看清楚噢。这里选择的是latest-Linux版本,所以下载的程序会随着python的版本更新而更新(现在下载的版本默认的python版本已经是3.8了)
- 安装
chmod 777 Miniconda3-latest-Linux-x86_64.sh #给执行权限
bash Miniconda3-latest-Linux-x86_64.sh #运行
如果此时输入conda提示没有此命令的时候,可以通过执行
source ~/.bashrc
来更新系统索引。由于系统默认是打开base环境,如果想关闭自启动的base环境可以执行
conda config --set auto_activate_base false
注意,如果是第一次安装,则一路yes下来就可以。如果之前conda安装过软件,则一路yes下来是会有隐患。conda会污染你原来的环境,把你原来设置好的东西进行更改。所谓的会污染环境等等问题可能都是将大量的软件直接安装在conda的base环境中引起的,只要养成好的使用习惯,灵活使用conda create 命令将不同的软件安装到自己单独的虚拟环境中就可以了。把conda这条蟒蛇关进一个一个的笼子里,才能更好的为我们的科研服务~
- conda安装好后会多几个软件
Anaconda Navigtor :用于管理工具包和环境的图形用户界面,后续涉及的众多管理命令也可以在 Navigator 中手工实现。
Jupyter notebook :基于web的交互式计算环境,可以编辑易于人们阅读的文档,用于展示数据分析的过程。
qtconsole :一个可执行 IPython 的仿终端图形界面程序,相比 Python Shell 界面,qtconsole 可以直接显示代码生成的图形,实现多行代码输入执行,以及内置许多有用的功能和函数。
spyder :一个使用Python语言、跨平台的、科学运算集成开发环境。
- 添加channel
这个道理跟家里的电视机是一样一样的,安装conda就相当于买了一台电视机,但是有电视了不意味着你就能看节目了,你要手动添加频道才能看你想看的电视节目。
# 官方channel:
conda config --add channels bioconda
conda config --add channels conda-forge
# 清华镜像channels:
# 默认只需要添加清华的channel就可以
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/
# 查看已经添加的channels,下面2条命令均可以
conda config --get channels
vim ~/.condarc
- conda版本查看
conda -V
conda --version
- conda更新
conda update conda #更新conda
conda update anaconda #更新anaconda
conda update anaconda-navigator #update最新版本的anaconda-navigator
三、packages 管理
- 查看已安装的包
# 查看当前环境下已安装的包
conda list
# 查看某个指定环境(xxxxx)下已安装的包
conda list -n xxxxx
# 查找package信息,例如查找numpy包信息,会列numpy的所有版本
conda search numpy
- 安装package
conda install -n xxxxx numpy pandas
安装多个包用空格隔开
如果不用-n指定环境名称,则被安装在当前环境
也可以通过-c指定通过某个channel安装
- 更新package
conda update numpy # 更新numpy(当前活跃的环境)
conda update -n xxxxx numpy # 更新指定xxxxx环境下的numpy
conda update python # 假设当前环境是python3.4, conda会将python升级为3.4.x系列的最新版本
- 删除package
conda remove numpy # 删除numpy包(当前活跃的环境)
conda remove -n xxxxx numpy # 删除xxxxx环境下的包
四、environment 管理
- 查看已创建的虚拟环境
conda env list
conda info -e
conda info --env
- 环境启动和关闭
conda activate xxxx #开启xxxx环境
conda deactivate #关闭环境
- 创建虚拟环境
conda create -n env_name list_of_packages
env_name是需要创建的环境名称,list_of_packages是在新环境中需要安装的工具包,有多个时用空格隔开创建一个名为的环境,指定Python版本是3.5(conda会自动寻找3.5.x中的最新版本)
conda create -n xxxx python=3.5
conda create --name xxxx python=3.5
- 删除虚拟环境
conda remove -n xxxx --all #删除一个已有的环境
- 克隆虚拟环境
conda create -n BBB --clone AAA # 克隆环境,我想创建一个新环境BBB,完全克隆AAA的环境配置
- 环境重命名
conda没有重命名的命令,所以可以先 clone 一个环境,然后删除原有的环境
- 环境导入与导出
# 如果想要导出当前环境的包信息可以用
conda env export > environment.yaml # 将包信息存入yaml文件中.
# 当需要重新创建一个相同的虚拟环境时可以用
conda env create -f environment.yaml
五、conda,anaconda,pip的关系
-
conda和anaconda的区别在于:anaconda是一套整体的软件包管理和环境管理系统,里面包含了虚拟环境,仓库,第三方软件等,而conda仅仅是其中的核心,位于anaconda/lib/conda,是一个执行命令的工具。广义上认为conda等价于anaconda。
-
conda与pip都是软件包管理工具,但是区别在于:
- conda将下载的第三方软件包安装在anaconda/pkgs,而pip将软件安装在anaconda/bin/site-packdge
- pip是用来安装python包的,安装的是python wheel或者源代码的包。从源码安装的时候需要有编译器的支持,pip也不会去支持python语言之外的依赖项。
- conda是用来安装conda package,虽然大部分conda包是python的,但它支持了不少非python语言写的依赖项,比如mkl cuda这种c c++写的包。然后,conda安装的都是编译好的二进制包,不需要你自己编译。所以,pip有时候系统环境没有某个编译器可能会失败,conda不会。这导致了conda装东西的体积一般比较大,尤其是mkl这种,动不动几百兆甚至一G多。
- 然后,conda功能其实比pip更多。pip几乎就是个安装包的软件,conda是个环境管理的工具。conda自己可以用来创建环境,pip不能,需要依赖virtualenv之类的。意味着你能用conda安装python解释器,pip不行。这一点我觉得是conda很有优势的地方,用conda env可以很轻松地管理很多个版本的python,pip不行。
- 然后是一些可能不太容易察觉的地方。conda和pip对于环境依赖的处理不同,总体来讲,conda比pip更加严格,conda会检查当前环境下所有包之间的依赖关系,pip可能对之前安装的包就不管了。这样做的话,conda基本上安上了就能保证工作,pip有时候可能装上了也不work。不过我个人感觉这个影响不大,毕竟主流包的支持都挺不错的,很少遇到broken的情况。这个区别也导致了安装的时候conda算依赖项的时间比pip多很多,而且重新安装的包也会更多(会选择更新旧包的版本)。
- 最后,pip的包跟conda不完全重叠,有些包只能通过其中一个装。
如有任何问题,欢迎留言。