0%

Python2包管理工具对比

参考地址:Python 包管理工具解惑

参考地址中作者详尽的调研并解释了相关问题,相对于其他博客内容,此篇内容系统性更强,这需要学习。

1. 疑惑问题

python 包管理我本身一直未曾仔细研究,处于混沌的状态。目前只知道pip,conda等包管理工具。

目前存在的问题有:

  1. 如何私有发布自己的模块

  2. 如何共有发布模块(发布到PyPI)

  3. 各种包管理工具的差异与用法

    • distutils

    • setuptppls

    • distribute

    • disutils2

    • dislib

    • pip

  4. wheel与Egg的关系

2. Python包管理工具学习

在上述参考文章中对各包管理工具已经有了基本的侧重,故此学习也存在侧重。

2.1 distutils

setuptools是 distutils 的加强版,目前已经自动采用setuptools

distutils是python标准库的一部分,能够进行python模块的安装发布

  • setup.py是利用distutils 的功能写成的,示例

  • 常用功能

    1. 安装模块:到当前Python环境中,可以使用此模块提供的setup.py 文件:

      1
      python setup.py install
    2. 发布模块:

      1
      2
      3
      4
      5
      6
      #打包为tar.gz或者zip压缩包
      python setup.py sdist
      #打包为rpm
      python setip.py bdist_rpm
      #打包为exe
      python setup.py bdist_wininst

      2.2 setuptools 和 distribute

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
2
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 的区别

    wheel vs 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