python包管理工具之间的关系

现在的python包管理工具有很多,非常混乱,必须理清他们之间的关系才能更好的使用python构建强大的包关系系统工具。

首先:python官方推荐的第三方库是PyPI:

PyPI(Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI。PyPI推荐使用pip包管理器来下载第三方库。

而这些包管理工具正是为了管理,安装和发布这些常用的包而开发的,这些包管理工具的作用就是安装,管理和发布python包,以及python的一些项目。

首先:

  1. distutils:distutils是python自带的基本安装工具,应该说是第一代,应该比较早了,现在可能已经不用了,因为再linux下测试的时候,使用python setup.py install并不管用。他适用于非常简单的场景,主要功能是:

为项目创建setup.py脚本 也就是说,你开发了一个项目或者包,那你得安装或者发布吧,就可以执行这个脚本安装和运行.

这样执行python setup.py install即可安装。

  1. setuptools: 针对distutils做了大量的扩展,尤其是加入了包依赖机制,这是因为之前那个distutils发布包的时候,只能发布自己独立编写的包,或者自己全部代码编写的项目文件,但是,在很多大的项目中,我们会经常使用一些其他的第三方包的功能,这时候我们再打包我们开发的这个项目文件,就必须使用setuptools了,这样就没必要再把一整套代码拷贝过来写上了,直接引用,等别人使用我们的项目或包文件的时候,直接一起下载一起引用使用即可。可以这么说,setuptools,因为这一点功能,非常有用,已经事实上成了很多的包开发管理发布的标准,只要我们想安装别人开发的大项目,就可能必须安装使用setuptools,比如django等,在我们开发或者是发布我们自己的包和项目的时候,也可以使用setuptools,当然也可以使用其他的,而不使用setuptools。

经过上面的两个对比,我们发现其实distutils基本上就没什么用,可以不用,我们直接使用setuptools即可,这也是distutils使用比较少,而setuptools使用比较多的根本原因。

  1. distribute:distribute在英文中的意思是发布的意思,这个也是一个python发布和管理,及安装使用python包的管理工具,他的出现是因为setuptools开发进度缓慢,不支持python3,而且可能是因为一开始大家刚开始开发的setuptools,项目经验不足,导致setuptools代码比较混乱,这个时候,一些其他的工程师就想再开发一套包管理工具,对setuptools重构一下,完善一下代码,添加一些新功能,并且好好的组织一下代码,并希望将来能取代setuptools并被接纳成为官方标准的库,可能他们很努力,很快就让社区接受了distribute这个包管理工具。

但是distribute最终未能纳入python官方标准库, Guido 也就python语言的开发发明者并未接纳 distribute 为官方标准,并说明了原因,可能是会跟原来的distutils有冲突,或者distutils必须存在,而且如果更改的话会导致python编辑器代码比较混乱或者代码量很大的原因吧,最终distribute没有被接纳入python的标准库。、

  1. 使用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包。

  1. 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包管理工具他们之间的关系的更多相关文章

  1. Python包管理工具和多版本环境管理

    1. Python包管理工具 在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_instal ...

  2. Python 包管理工具解惑

    Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...

  3. 转载:Python 包管理工具解惑

    Python 包管理工具解惑 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供m ...

  4. Python包管理工具小结

    此文已由作者张耕源授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 作为一名接触Python有一段时间的初学者,越来越体会到Python的方便之处,它使人能更 多的关注业务本身 ...

  5. Python | Pipenv官方推荐的python包管理工具

    原文地址:https://cloud.tencent.com/developer/article/1355672 Pipenv - 官方推荐的的python包管理工具. Pipenv是一款旨在将所有包 ...

  6. python 包管理工具

    python 包管理工具 Python当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils,显得较为混乱. 而将来的工具链组合 ...

  7. Python包管理工具pip的基本使用

    1.简介 pip 是一个Python包管理工具,主要是用于安装 PyPI 上的软件包,可以替代 easy_install 工具. 2.pip安装 如果你安装的Python 2 >=2.7.9 或 ...

  8. [转载]Python 包管理工具

    [转载]Python 包管理工具 最近由于机缘巧合,使用各种方法安装了一些Python包,所以对Python的包管理开始感兴趣.在网上找到一篇很好的文章:https://blog.zengrong.n ...

  9. python 包管理工具 pip 的配置

    近几年来,python的包管理系统pip 越来越完善, 尤其是对于 windows场景下,pip大大改善了python的易用性. https://www.cnblogs.com/yvivid/p/pi ...

随机推荐

  1. INFO org.apache.hadoop.ipc.RPC: Server at master/192.168.200.128:9000 not available yet, Zzzzz...

    hadoop 启动时namenode和datanode可以启动,使用jps命令也可以看到进程,但是在浏览器中输入master:50070却没有显示datanode 查看datanode的log日志: ...

  2. YII获取当前URL

    <?php //当前域名   echoYii::app()->request->hostInfo;   //除域名外的URL   echoYii::app()->request ...

  3. Android开发之自己定义Spinner样式的效果实现(源码实现)

    android系统自带的Spinner样式是远远满足不了我们实际开发过程中对Spinner UI风格的要求,因此我们肯定须要为了切合整个应用的风格,改动我们的Spinner样式.系统给我们提供了两种常 ...

  4. 解决javah生成.h头文件找不到找不到android.support.v7.app.AppCompatActivity的问题

    问题描写叙述: 在使用Android Studio进行JNI开发时,须要使用javah生成C或C++的头文件,可是可能会遇到: 错误: 无法訪问android.support.v7.app.AppCo ...

  5. android动画具体解释四 创建动画

    使用ValueAnimator进行动画 通过指定一些int, float或color等类型的值的集合.ValueAnimator 使你能够对这些类型的值进行动画.你需通过调用ValueAnimator ...

  6. DRF的认证,频率,权限

    1,DRF的认证 初识认证:浏览器是无状态的,一次导致每次发的请求都是新的请求,所以每次请求,服务器都会进行校验,这样就很繁琐,这趟我们就需要给每一个用户登录后一个新的标识,浏览器每次都会带着这个唯一 ...

  7. Latex 3: 解决LaTeX编译卡顿问题

    1.问题: 最近在编译latex时,老是在tulmr.fd处编译很久,但是以前不这样啊,那肯定就是我最近做了什么导致这样的了,是什么呢? 2.解决: 后来google下发现了解决办法,原来是我新安装了 ...

  8. (15)ServletConfig对象详解

    1,作用 主要是用于加载servlet的初始化参数.在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象) 2,创建时机和对象的获取 创 ...

  9. bzoj5333: [Sdoi2018]荣誉称号

    请不要去改题目给的输入,不然你会wa穿... 这么故弄玄虚的题目,肯定要先转换问题 看到这个不断的除2想起别人家的线段树的写法...x的两个孩子是x<<1和x<<1|1 然后问 ...

  10. YTU 2597: 编程题B-选拔飞行员

    2597: 编程题B-选拔飞行员 时间限制: 1 Sec  内存限制: 128 MB 提交: 131  解决: 35 题目描述 2100年空军选拔高中生飞行学员基本条件要求如下,年龄范围:16-19周 ...