参考地址:Python 包管理工具解惑
参考地址中作者详尽的调研并解释了相关问题,相对于其他博客内容,此篇内容系统性更强,这需要学习。
1. 疑惑问题
python 包管理我本身一直未曾仔细研究,处于混沌的状态。目前只知道pip,conda等包管理工具。
目前存在的问题有:
如何私有发布自己的模块
如何共有发布模块(发布到PyPI)
各种包管理工具的差异与用法
distutils
setuptppls
distribute
disutils2
dislib
pip
wheel与Egg的关系
2. Python包管理工具学习
在上述参考文章中对各包管理工具已经有了基本的侧重,故此学习也存在侧重。
2.1 distutils
setuptools是 distutils 的加强版,目前已经自动采用setuptools
distutils是python标准库的一部分,能够进行python模块的安装与发布。
setup.py是利用distutils 的功能写成的,示例
- setup.py格式的详细描述:Writing the Setup Script
常用功能
2.2.1 setuptools
setuptools包含了easy_install 这个工具。
ez_setup.py 是 setuptools的安装工具。ez是easy的简写。
简单的说,setuptools 是一个项目的名称,是基础组件。而
easy_install
是这个项目中提供的工具,它依赖基础组件工作。
使用setuptools可以自动下载、构建、安装和管理python模块。
2.2.2 distribute
distribute 是setuptools的一个分支版本。
2.3 distutil2和dislib
这两种工具目前并未进入python3的标准库中,不必了解
3.打包文件格式
3.1 Eggs
The Quick Guide to Python Eggs
Eggs are to Pythons as Jars are to Java..
Eggs格式是setuptools引入的一种文件格式,使用.egg扩展名,用于python模块的安装。
setuptools可以识别、解析并安装它。
1 | easy_install /my_downloads/OtherPackage-3.2.1-py2.3.egg |
缺点:
但是pip目前是python 包管理标准,而且pip 目前已经替代了 easy_install ,即是其很多功能建立在setuptools 组件之上。pip 本身并不希望使用Egg 格式,更希望采用“源码发行版(python setup.py sdist )”,这样可充分利用 Requirements File Format提供的功能。
3.2 Wheel
Wheel 本质上是一个zip 包格式,其使用 .whl 扩展名,用于python 模块的安装,它的出现是为了替代 Egg.
发布包
wheel 还提供一个 bdist_wheel 作为setuptools 的扩展命令, 这个命令可以用来生成 wheel 包。
安装包
pip 提供了一个wheel 子命令来安装wheel 包。
setup.cfg
setup.cfg可以用来定义wheel 打包的相关信息
与Egg 的区别
4.发布模块
这里纯抄
对于 python3 程序员来说,当然应该先看这一篇:Distributing Python Modules。
另外,Tutorial on Packaging and Distributing Projects 也足够详细和官方。
而 Python2 程序员则应该看这篇 Distributing Python Modules 。
当然,setuptools 的官方文档也是不错的教程:Building and Distributing Packages with Setuptools 。
这篇教程可以用来入门:Sharing Your Labor of Love: PyPI Quick and Dirty
至于如何发布自己的模块到 PyPI 或者搭建自己的私有包管理服务器,上面的文章已经讲得非常清楚了。
5.结论
- 发布包采用的工具:setuptools
- 发布包格式:wheel