python包管理工具他们之间的关系
python包管理工具之间的关系
现在的python包管理工具有很多,非常混乱,必须理清他们之间的关系才能更好的使用python构建强大的包关系系统工具。
首先:python官方推荐的第三方库是PyPI:
PyPI(Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI。PyPI推荐使用pip包管理器来下载第三方库。
而这些包管理工具正是为了管理,安装和发布这些常用的包而开发的,这些包管理工具的作用就是安装,管理和发布python包,以及python的一些项目。
首先:
- distutils:distutils是python自带的基本安装工具,应该说是第一代,应该比较早了,现在可能已经不用了,因为再linux下测试的时候,使用python setup.py install并不管用。他适用于非常简单的场景,主要功能是:
为项目创建setup.py脚本 也就是说,你开发了一个项目或者包,那你得安装或者发布吧,就可以执行这个脚本安装和运行.
这样执行python setup.py install即可安装。
- setuptools: 针对distutils做了大量的扩展,尤其是加入了包依赖机制,这是因为之前那个distutils发布包的时候,只能发布自己独立编写的包,或者自己全部代码编写的项目文件,但是,在很多大的项目中,我们会经常使用一些其他的第三方包的功能,这时候我们再打包我们开发的这个项目文件,就必须使用setuptools了,这样就没必要再把一整套代码拷贝过来写上了,直接引用,等别人使用我们的项目或包文件的时候,直接一起下载一起引用使用即可。可以这么说,setuptools,因为这一点功能,非常有用,已经事实上成了很多的包开发管理发布的标准,只要我们想安装别人开发的大项目,就可能必须安装使用setuptools,比如django等,在我们开发或者是发布我们自己的包和项目的时候,也可以使用setuptools,当然也可以使用其他的,而不使用setuptools。
经过上面的两个对比,我们发现其实distutils基本上就没什么用,可以不用,我们直接使用setuptools即可,这也是distutils使用比较少,而setuptools使用比较多的根本原因。
- distribute:distribute在英文中的意思是发布的意思,这个也是一个python发布和管理,及安装使用python包的管理工具,他的出现是因为setuptools开发进度缓慢,不支持python3,而且可能是因为一开始大家刚开始开发的setuptools,项目经验不足,导致setuptools代码比较混乱,这个时候,一些其他的工程师就想再开发一套包管理工具,对setuptools重构一下,完善一下代码,添加一些新功能,并且好好的组织一下代码,并希望将来能取代setuptools并被接纳成为官方标准的库,可能他们很努力,很快就让社区接受了distribute这个包管理工具。
但是distribute最终未能纳入python官方标准库, Guido 也就python语言的开发发明者并未接纳 distribute 为官方标准,并说明了原因,可能是会跟原来的distutils有冲突,或者distutils必须存在,而且如果更改的话会导致python编辑器代码比较混乱或者代码量很大的原因吧,最终distribute没有被接纳入python的标准库。、
- 使用setuptools或者distribute安装python包。
因为我们的setuptool和distribute软件包管理工具都是基于distutils包管理工具来开发的,所以说只要是我们下载了一个包,只要他是distutils,或者是setuptools,或者是distribute构建开发发布的,那么他很肯定会带有一个setup.py脚本文件,我们就可以直接使用
python setup.py install命令安装我们下载的python项目或包。
5.easy_install安装命令:
因为我们的包都是安装放在官方的PyPI仓库中的,所以,setuptools和distribute直接开发了一个自动搜索并安装包的工具easy_install,这个是setuptools和distribute自带的安装脚本,也就是说一旦setuptools和distribute安装完毕,easy_install即可使用,最大的特点是自动在python官方维护的包源PyPI搜索想安装的软件包及他所依赖的软件包,类似于yum,使用easy_install安装第三方python包非常方便,使用命令如下:
easy_install 包名
setuptools / distribute 都只是扩展了 distutils,这个命令将自动从 PyPI 查找/下载/安装指定的包。
6.pip包安装命令
pip包安装命令的出现非常明确,就是为了取代easy_install安装命令,easy_install安装命令有很多不足,安装事物是非原子性操作,也就是安装包的时候只能一下安装所有的包及其依赖,想单独安装其中的某一个包则不行,而且他只支持svn,并且没有卸载包的命令,用起来非常麻烦,安装一系列的相关依赖包或者是安装一个单独的包还可以,但是如果想安装一些列不相关的没什么依赖的包就非常麻烦,而且需要写脚本。pip正好解决了上面的问题,事实上已经成为了一个安装包命令的一个标准。又因为,linux系统python版本混乱,pip正好和virtualenv一起很好的解决这个问题,也就是说virtualenv和pip是一个在linux系统上使用python及配置python环境及管理python安装包的好搭档。
pip基本命令:
安装包:pip install 包名
卸载包:pip uninstall 包名
而且pip支持能够从通过任意包管理系统,如git,PyPI,svn或者其他一些包或版本管理工具系统,或者其他任意浏览器访问到的地址安装python包。
- distutils:本来一开始setuptools和distribute的诞生是因为distutils的功能不完善,进而开发出的想替代distutils的包管理工具,但是因为后来因为各种原因,未被python官方库接纳,也是因为官方想结束这些混乱,于是这些开发者和官方正打算一起开发一套结束这种混乱的包管理工具局面,于是一起开发除了distutils第二代包管理系统distutils2,他将成为python3.3的标准库,并在以后的其他python3版本中正式使用,可以说他必定结合了setuptools和distribute以及第一代distutils的各种功能,并配合和pip包管理命令一同所谓python包管理的基本工具。
注意:我们在使用pip命令的时候,也必须安装好setuptools或者是distribute,而distribute也是后来在setuptools的基础上开发的,属于setuptools的一个分支,故我们现在装的setuptools实际上也就是distribute。
上面我们已经基本理清了python各种包管理工具之间的关系,接下来我们将要安装并使用一下这些包管理工具。
补充:参考:https://blog.zengrong.net/post/2169.html
python包管理工具他们之间的关系的更多相关文章
- Python包管理工具和多版本环境管理
1. Python包管理工具 在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_instal ...
- Python 包管理工具解惑
Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...
- 转载:Python 包管理工具解惑
Python 包管理工具解惑 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供m ...
- Python包管理工具小结
此文已由作者张耕源授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 作为一名接触Python有一段时间的初学者,越来越体会到Python的方便之处,它使人能更 多的关注业务本身 ...
- Python | Pipenv官方推荐的python包管理工具
原文地址:https://cloud.tencent.com/developer/article/1355672 Pipenv - 官方推荐的的python包管理工具. Pipenv是一款旨在将所有包 ...
- python 包管理工具
python 包管理工具 Python当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils,显得较为混乱. 而将来的工具链组合 ...
- Python包管理工具pip的基本使用
1.简介 pip 是一个Python包管理工具,主要是用于安装 PyPI 上的软件包,可以替代 easy_install 工具. 2.pip安装 如果你安装的Python 2 >=2.7.9 或 ...
- [转载]Python 包管理工具
[转载]Python 包管理工具 最近由于机缘巧合,使用各种方法安装了一些Python包,所以对Python的包管理开始感兴趣.在网上找到一篇很好的文章:https://blog.zengrong.n ...
- python 包管理工具 pip 的配置
近几年来,python的包管理系统pip 越来越完善, 尤其是对于 windows场景下,pip大大改善了python的易用性. https://www.cnblogs.com/yvivid/p/pi ...
随机推荐
- Excel小tips - 如何实现多列成绩统一排名
本文参考:http://mp.weixin.qq.com/s/XR49hyG9Cods7rOcsM-tRg 如果有以下数据文件,需要进行成绩排名. 第一步:先在成绩列后边添加一列,用来显示名次.如下: ...
- UVALive3211- Now or later(二分+2-SAT)
题目链接 题意:有n架飞机.每架飞机都能够选择早着陆和晚着陆两种方式之中的一个,且必须选择一种. 任务就是安排全部飞机着陆时.相邻两个着陆时间间隔的最小值尽量大. 思路:用二分处理最小值尽量大.该题目 ...
- <一>读<<大话设计模式>>之简单工厂模式
工厂模式尽管简单.可是写下这篇文章却不简单. 第一:本人经过内心的挣扎后才决定開始写博文的.为什么呢,由于好长时间没有写了,对自己的文学功底也是好不自信.可是技术这东西你不写出来你真不知道自己掌握多少 ...
- 在云服务器 ECS Linux CentOS 7 下重启服务不再通过 service 操作,而是通过 systemctl 操作
在云服务器 ECS Linux CentOS 7 下重启服务不再通过 service 操作,而是通过 systemctl 操作. 操作说明如下: 1. 查看 sshd 服务是否启动: 看到上述信息就 ...
- Android修改签名
#!/bin/shtmp=~/temp.apkcp "$1" "$tmp"zip -d "$tmp" META-INF/\*jarsigne ...
- Python安装Mysql驱动出错解决(最新出炉)
Python中最连接Mysql常用的驱动是 mysql-python :mysql的C语言的驱动 mysql-connector:msql官方的驱动 pymysql:python语言的驱动 我这里安装 ...
- api多版本方案(URL)
api多版本方案(URL) 1.利用url https://www.taofen8.com/api/v2/getXXX 2.利用自定义请求头 api-version https://www.taofe ...
- JavaScript语言基础12
使用if语句时.假设碰到很多个条件时,就不应该继续使用if语句了,JavaScript提供了一个更高效的替代方案,那就是switch语句,我们先看看switch语句的模板: <HTML> ...
- 相关性系数缺点与证明 k阶矩
相关性系数 https://baike.baidu.com/item/相关系数/3109424?fr=aladdin 缺点 需要指出的是,相关系数有一个明显的缺点,即它接近于1的程度与数据组数n相关, ...
- mac系统怎么给文件夹加密?mac文件夹加密教程
mac系统怎么给文件夹加密?目前来说,若想要对你的Mac OS下面的文件进行加密的话有三种方法可以可以做到,第一种方法,Mac自带磁盘工具:第二种方法,例如BatterZip此类Mac压缩解压工具打包 ...