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 ...
随机推荐
-
DELPHI实现百度开放平台
学习百度语音 百度语音开发平台 http://yuyin.baidu.com/ 百度开发者账号 13600514494,短信登录 应用账号 词语听写 App ID: 7799366 API Key: ...
-
[LeetCode] Longest Consecutive Sequence
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...
-
学习mongo系列(三) update() save()
一.update()方法 >db.user.update({"name":"user1"},{$set:{"title":" ...
-
SilverLight页面跳转(转载)
// Silverlight页面的跳转 // (Application.Current.RootVisualasIContent).Content=newDragControl(); //Silver ...
-
op论坛,分支
http://www.arm9home.net/thread.php?fid=68 http://www.openwrt.org.cn/bbs/forum.php https://dev.openwr ...
-
强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)
强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...
-
关于CS1061报错(XX不包含XXX的定义,并且找不到类型为XX的第一个参.....)的一种可能的解决的办法
在我编程中,我遇到了一个这样的报错, 可是我引用的product类中又确实定义了这么一个方法, protected void BindPageData(int categoryID) { Produc ...
-
springMVC源码分析--SimpleControllerHandlerAdapter(三)
上一篇博客springMVC源码分析--HandlerAdapter(一)中我们主要介绍了一下HandlerAdapter接口相关的内容,实现类及其在DispatcherServlet中执行的顺序,接 ...
-
req和resp常用的方法
req: 1. setAttribute()在Request域中存储数据 2. setCharacterEncoding()设置请求参数的编码方式,只对post请求有效 3. getMethod() ...
-
git本地推送远程
第一次将本地映射到已经存在的仓库 https://techoverflow.net/2017/08/09/how-to-solve-git-fatal-no-configured-push-desti ...