pip与Python
pip是Python的包管理工具,以前pip需要单独下载,现在集成在Python之中了,但这并没有改变pip与Python的“平行地位”的事实。
关于pip的包管理,需要注意以下几点:
- pip作为Python包管理工具,其本身也是python包
- pip只能用于Python包的管理
不像后面介绍的conda,后者也是一个包管理工具,但不仅限于Python包 - pip下载包的源地址默认是:https://pypi.org,但是一般使用国内镜像源
pypi(Python Package Index)是Python的官方包库,非常齐全。但是速度有点慢,一般换为国内的镜像源。详见:使用pip安装包 - pip下载的包文件格式是wheel或Python源码
- pip并不自动解决包的兼容性问题
假设pip安装的包A和包B都依赖于包C,但是依赖的版本不一样,pip并不会自动检查兼容性问题,这就存在风险。
conda与Python
表面看起来,conda和pip好像没区别,conda也是管理Python包的工具。但是深究起来还是有很些区别的。
- conda可以不仅仅可以管理Python包
这有两层含义:
1)conda可以管理其他语言的包
2)conda除了可以管理Python包(或者称为依赖)以外,也可以创建Python环境,即conda可以作为Python的包管理工具,同时也可以作为Python环境管理工具。 - conda将Python本身也看做是一个包
这在:
conda create -n NAME python=3.7
中看得非常明显:
这和conda并不单单为Python服务的定位是符合的。
- 一般使用conda的wrapper,如Anaconda,Miniconda等,而不是原生的conda,
- conda下载源不是https://pypi.org
对于最常用的Anaconda,conda包源地址是Anaconda repository和Anaconda Cloud,对于其他wrapper各有官方地址。 - conda下载的包文件格式是二进制文件
- conda下载的包自动检查兼容性问题
conda与Anaconda
既然conda已经可以管理Python环境和包了,为什么还要Anaconda呢,或者说Anaconda跟conda是什么关系?
答:Anaconda = Python(base) + conda + 一些常用包 + Jupyter,Spyder等工具:
一个和Anaconda非常类似的就是Miniconda,它更为精简:
它只有Python和conda,不像Anaconda那样自作聪明下很多包,也没有任何Jupyter等工具。
conda本身是什么:pip + vitualenv/venv
以上说到,conda除了可以管理Python包,还可以创建Python虚拟环境。
关于虚拟环境,举个简单的例子:你有一个A项目构建在Python 3.5.7的环境下。现在import一个B项目,后者构建在Python 2.7.1环境下,为了调试两个项目,难道你要下载安装两个Python吗,那10,50个项目呢?
这就是Pyhon虚拟环境管理工具的使用场景:将Python编译器也视为一个包/依赖,为项目定制轻量级的Python环境。
当然,有专门的工具用于Pyhon虚拟环境管理(只负责管理环境,不负责管理包),如 virtualenv/venv等(感兴趣可以自己了解)。
所以,这么看来,我们很容易理解conda:
conda = pip(管理包) + virtualenv/venv(管理Python虚拟环境)
另外,将之前介绍的都考虑进来,按重量级来划分应该是:
Python(不含pip)
< Python(含pip)
< Python(含pip)+virtualenv/venv
< conda
< Miniconda
< Anaconda
如此看来,最“干净”的Python开发方式应该是:Python(已内含pip用于管理包)+ virtualenv/venv(管理Python虚拟环境)。而conda集成了这两点,虽然不是那么“纯粹”,当胜在“傻瓜无脑”。
而Anaconda应该是最完善,也是最笨重的方式,现在就更能理解理解:“Anaconda是Python发行版本”这句话了。
当然,关于pip与conda推荐一下几个文章:
python包管理工具:Conda和pip比较
关于conda和anaconda不可不知的误解和事实——conda必知必会
觉得喜欢可以点个赞哦