首页
登录 | 注册

Python打包的艺术(二)- Packaging Tools的昨天,今天,明天-a

Packaging Tools的昨天,今天,明天

by Harrison Feng in Python

截至今年3月,Python的打包工具链处于的状态可以“非常混乱来形容。除了官方的distutils,第三方有
setuptools
(easy_install),distribute,pip,zc.buildout。这些都是相当有名的,还有不是很有名的,如
bento
conda而setuptools,distribute和pip正如综述里介绍的一样,联系又是相当紧密。到底该用哪个
呢?看完文章就一清二楚了。

昨天(History)

最早,Python官方只有distutils,标准的打包发布,安装就是靠一个名叫setup.py的脚本,setup.py有规
定的写法。
用下面简单的三个命令可以创建包,build包和安装包。这些都要基于你有源码并且按照distutils
的标准创建了setup.py。可以说非
常的“土”,但是却不“豪” ;-)。
  1. python setup.py sdist
  2. python setup.py build
  3. python setup.py install
安装完后,没有卸载的命令。不用了的库,要么留在哪里,要自己手动删除,稍不注意,可能铸成大错,删
除了不该删的。后来
出现了非标准的库setuptools及其绑定的命令行工具easy_install,以及新的打包文件格
式Python Egg(.egg)。setuptools
的出现可以说是大大改善了Python打包工具链的囧态。setuptools能很
容易的打包Python项目,并发布到pypi。而通过
easy_install很容易从pypi安装第三方库。而且setuptools还
能管理一个库的多个版本。但是还是没有uninstall的功能。
setuptools从第一个版本发布到pip出现之前时,
一直都统治着Python的打包工具链,虽然它有很多不足,但是一般的Python用户
还真是离不开它,尤其是在
*nix平台。而一些大型的Python社区,比如Zope,则是有自己工具链,那就是著名的zc.buildout。
zc.buildout
的强大在于它不仅像setuptools那样构建安装python包,而且能够像virtualenv一样,构建一个封闭隔离的Python
开发
环境。当然,它在Python的web开发社区应用最广。当然除了这两个“名人”外,还有小众的工具如:bento,
conda和hashdist。不管是大众的,小众的,它们都在各自的area里慢慢的繁衍生息。后来,随着Python在
全世界风靡,世界各地的PyCon风起云涌。PyCon也来到China,
越来越多的开发者及用户开始使用Python。
一句“人生
短,我用Python”的中文贴在Guido的胸前被人发现,更是把Python推向G点;-)。如此一来,
Python这门语言连一个标准的打包生态系统都没有,这让强大而活跃的Python社区情何以堪。所以PyPA
Python Packaging Authority )
team成立(since April 2011),目的就是要彻底改变Python打包生态系统
的混乱局面。将Python打包生态系统加到Python标准库。
PyPA team成立后,立即在github.com上注册,开
始大刀阔斧的开发pip,两年多的时间就将pip拉出9个release,从1.0到1.4.1,目前1.5正在紧锣密鼓的开发中。
并从setuptools里分支出一个项目distribute做为setuptools的drop-in替代品。目前distribute已经合并回setuptools
项目里。这些工作在2013年3月之前并没有实质性改变Python打包生态系统的混乱局面,所有上面的工具链
都在运行,新的生态系统的蓝图没有产生(或许当时一直在讨论,而我等当然是不知道)。

今天(Now)

今年3月,在PyCon US大会上,PyPA team的大侠们集体亮相,讨论Python Packaging的未来,并接受提问。
提到"./setup.py install must die"(./setup.py install这个命令必须死掉,可见PyPA的整治Python打包生态系
的决心)。很快,Python Packaging的toolchain被确定下来,它们分别是pip,setuptools,
virtualenv和wheel
目前它们之间的关系如图所示:
                                                              
4个工具都是独立的项目,它们之间的逻辑关系是,pip和virtualenv是和用户直接交互的。setuptools是pip的基础
库,pip相当于是前端命令行工具,提供了非常丰富的命令。pip和setuptools可以脱离virtualenv单独使用。但是
virtualenv的release确实是包含了最新的pip和setuptools,一旦用virtualenv创建了环境,不需要自己安装pip和setuptools。
它们会自动被增加到新的环境,可以说是灰常方便。请看:
  1. pygeek@pygeek-at-ubuntu:~$ python2.7.6 virtualenv.py ~/pytVE
  2. New python executable in /home/pygeek/pytVE/bin/python2.7.6
  3. Also creating executable in /home/pygeek/pytVE/bin/python
  4. Installing Setuptools..............................................................................................................................................................................................................................done.
  5. Installing Pip.....................................................................................................................................................................................................................................................................................................................................done.
  6. pygeek@pygeek-at-ubuntu:~$ ~/pytVE/bin/pip list
    pip (1.4.1)
    setuptools (0.9.8)
    wsgiref (0.1.2)
而wheel是setuptools的扩展,即提供bdist_wheel用于创建wheel格式包(python egg的替代品)。pip可直接安
装wheel格式的包,并且pip不会支持python egg的安装(直接把python egg给废掉了)。

明天(Future)

未来总是美好的。未来将提供一个非常easy to use的接口给python的用户来使用python的打包生态系统。pip1.5将进入
Python 3.4正式版而且是跨平台的(Python小伙伴们不用手动安装了)。应该是这样的:
                                                  
pip将会有自己单独的release cycle,从pip1.6开始。消除pip对setuptools的依赖(那是要干掉setuptools啊???)
难看PyPI也将不再有,代替它将是新面孔的PyPI server,就像这样: New PyPI
你可以从这里获得所有最新的关于Python Packaging的信息。
https://python-packaging-user-guide.readthedocs.org/en/latest/

by
 Harrison Feng in Python


相关文章

  • Python打包的艺术(一)- 综述-a
    Python打包的艺术(一)- 综述 By Harrison Feng Python打包的艺术是一个专题,我将在这个专题里分享自己对构建.管理和发布Python软件包的理解.这个专题 将涉及几个Python模块,他们分别是distutils ...
  • 【Python那些事儿之四】Python中的对象(二)-a
    Python中的对象(二) By Harrison Feng in Python 在<Python中的对象(一)>中,我们对Python的对象有了基本的认识. 今天我们要探索的是Python中对象之间的关系. 首先我们来看三个名 ...
  • 写了一个小程序分析<Python科学计算>第二版目前的状态.在下面的目录中,[ ]中的两个数字分别表示章节的文字数和示例代码行数.上级目录的的数字和下级目录中的合计.目前全书有32万字,9100行示例代码. import os ...
  • 【Python那些事儿之五】Python中的对象(三)-a
    Python中的对象(三) By Harrison Feng in Python 我们在前面的两篇文章<Python中的对象(一)>,<Python中的对象(二)>中分别分享了对象的基本概念以及Python 中对象的 ...
  • 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架.网络爬虫.网络内容提取.模板引擎.数据库. ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.014 s.
京ICP备10005923号