Python包管理不同方式的区别
来源:互联网 发布:h5免费制作软件 编辑:程序博客网 时间:2024/06/05 11:37
Python包管理不同方式的区别
学习Python已经有一段时间,经常会遇到安装各种包的问题,一会 setup.py
, 一会 easy_install
,一会又是pip
,还有一些概念比如distutils
, setuptools
等等,搞不清楚谁是谁,什么时候应该用什么,今天就把这些概念 澄清一下。
distutils
distutils是Python标准库的一部分,其初衷是为开发者提供一种方便的打包方式, 同时为使用者提供方便的安装方式。
例如你创建了一个名为foo的包,包含一个foo.py文件,你想把它打包以便其它人使用。 这时候你需要写一个setup.py文件:
然后运行命令
$python setup.py sdist
然后你发现当前目录下出现一个名为dist的文件夹,里面有一个foo-1.0.tar.gz的包。 这个包里有三个文件,foo.py, setup.py, PKG-INFO,前两个文件和我们之前提到的两个文件一样。 PKG-INFO是关于包的一些信息。然后你就可以把foo-1.0.tar.gz给别人安装了。
安装者要使用这个包时,只需要解压这个foo-1.0.tar.gz文件,再运行命令
$python setup install
这个包就会被自动安装到系统合适的位置。
setuptools
setuptools 是对 distutils 的增强, 尤其是引入了包依赖管理。
setuptools可以为Python包创建 egg文件, Python 与 egg 文件的关系,相当于java与jar包的关系。
setuptools 提供的 easy_install 脚本可以用来安装 egg包。 另外, easy_install 可以自动从 PyPI 上下载相关的包,并完成安装,升级。
easy_install 提供了多种安装,升级Python包的方式,例如:
easy_install SQLObjecteasy_install -f http://pythonpaste.org/package_index.html SQLObjecteasy_install http://example.com/path/to/MyPackage-1.2.3.tgzeasy_install /my_downloads/OtherPackage-3.2.1-py2.3.eggeasy_install --upgrade PyProtocols
后来开发者们觉得 setuptools 开发的太慢了,fork出了 Distribute 项目,然后2013年8月, Distribute 又合并回 setuptools 0.7。
pip
pip 是安装,管理Python包的工具。它是对 easy_install 的一种增强。 同样可以从 PyPI 上自动下载,安装包。
在pip中,
- 安装前所有需要的包都要先下载,所以不会出现安装了一部分,另一部分没安装的情况
- 所有安装的包会被跟踪,所以你可以知道为什么他们被安装,同时可以卸载。
- 无需使用 egg 文件。
使用方式简单:
pip install pkg_namepip uninstall pkg_name
总结
用 pip
吧!
参考资料
- An Introduction to Distutils
- 可爱的 Python: pydoc 和 distutils 模块
- setuptools
- easy_install
- Python Egg
- why pip
- Differences between distribute, distutils, setuptools and distutils2?
- Python 包工具之间的关系
- Python包管理不同方式的区别
- Python包管理不同方式的区别
- python的包管理方式
- python包的管理(添加的3种方式 删除包)
- Linux源码包和RPM包的的区别以及RPM包服务管理方式与源码包服务管理方式
- 不同环境不同分支api-jar包的管理
- python的包管理系统
- python的参数管理包
- shell的不同执行方式及其区别
- 引用头文件不同方式的区别
- 【Python】写文件的不同方式
- Python+不同的数据存储方式比较
- 蒙特卡洛估值几种不同的计算方式(Python)
- Java 不同方式,不同位置创建String字符串的区别
- Python--xrange()和range()的区别不同
- Python 不同方法的区别和调用
- 设置默认编码方式 &不同编码方式的区别
- TCP与UDP的不同接包处理方式
- java项目之间的相互引用
- 黑马程序员:C#基础篇(五)迭代与泛型
- 数据结构(c++) 链表
- PHP编译参数说明
- 软件开发启示录——迟到的领悟
- Python包管理不同方式的区别
- android.content包-------AsyncQueryHandler
- loadrunner--相对初学者讲解比较不错的网站
- iOS开发个人独立博客收集
- ie6下的js调试工具companion.js
- 浅谈C++对象的拷贝与赋值操作
- maven学习过程记录--依赖1
- android跑马灯效果实现(一直滚动不受影响)
- GNU Make in Detail for Beginners