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 ...
随机推荐
- CSS 遮罩层、滑出页面
<style> .panel_bak { position:fixed; bottom:0; display:none; width:100%; margin:0px; padding:5 ...
- Linux命令chattr和lsattr
先看字面解释: chattr:chattr - change file attributes on a Linux file system lsattr - list file attributes ...
- hdu 1068 Girls and Boys(匈牙利算法求最大独立集)
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Linux 命令 sudo
sudo 这个命令. 是为了 让 普通用户 ,也能够以root的身份来运行 操作, 而这些普通用户 又不须要知道root的password. 在 sudo 运行命令的时候. 仅仅须要 输入自己的pas ...
- jni——如何转换有符号与无符号数
java数据结构默认均为有符号数,而通过jni转换到c/c++层,却不一定是有符号数. 如若在java中存储的即为无符号数,则在jni中可将jbyte直接进行类型转换. 若进行操作,则可在计算时,先将 ...
- AnkhSVN介绍
AnkhSVN介绍 Posted on 2012-11-15 23:24 ArRan 阅读(3120) 评论(1) 编辑 收藏 AnkhSVN是一款在VS中管理Subversion的插件,您可以在VS ...
- smartfoxserver扩展里面过滤聊天的不合法字符
http://blog.csdn.net/yc7369/article/details/35567105 近期做手游客户要求加上一个聊天功能.事实上嘛,个人认为这个聊天功能比較鸡肋,这部分差点儿已经有 ...
- android <application> 开发文档翻译
由于本人英文能力实在有限,不足之初敬请谅解 本博客仅仅要没有注明"转",那么均为原创.转贴请注明本博客链接链接 <application>语法: <appl ...
- Hadoop之中的一个:Hadoop的安装部署
说到Hadoop不得不说云计算了,我这里大概说说云计算的概念,事实上百度百科里都有,我仅仅是copy过来,好让我的这篇hadoop博客内容不显得那么单调.骨感.云计算近期今年炒的特别火,我也是个刚開始 ...
- Selenium 工具介绍、安装、配置及使用
概念 selenium是一款跨平台开源工具,用于web的功能完整性測试,想做压力測试的能够换软件了 先看一眼官方站 http://docs.seleniumhq.org/download/ 首先要FQ ...