区别:pip是Python包的通用管理器; conda是一个与语言无关的跨平台环境管理器。pip在任何环境中安装python包;conda需要安装在conda环境中装任何包。
Pip代表Pip Installs Packages,是Python的官方认可的包管理器,最常用于安装在Python包索引(PyPI)上发布的包。
先上图对比:
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多。
conda,可以为不同的任务创建不同的环境,即conda具有环境隔离功能。
conda的优势:包之间严格的依赖检查;是一个超越Python的环境管理器,可以创建多个环境,环境之间互相隔离;支持Python、R、C/C++;NumPy、SciPy直接使用Intel MKL,对Intel的CPU支持更好。缺点:没做好环境隔离的话,一些包可能安装不上。pip的优势:绝大多数包优先发布到pip上,安装方便,群众基础好。
缺点:不进行严格的依赖检查。对于绝大多数朋友,只是在自己的个人电脑上,用用NumPy,做图,其实用pip和conda区别真的不大。如果是搞研究或者开发,在一台服务器上多人共享使用,我建议最好是conda。
用版本迭代很快的库,我建议使用conda。