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

2023-11-15

本文转载至:http://blog.chinaunix.net/uid-15174104-id-4036539.html

截至今年3月,Python的打包工具链处于的状态可以“非常混乱来形容。除了官方的distutils,第三方有setuptools(easy_install),distribute,pip,zc.buildout。这些都是相当有名的,还有不是很有名的,如 bentoconda而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, c onda和hashdist。 不管是大众的,小众的,它们都在各自的area里慢慢的繁衍生息。后来,随着Python在全世界风靡,世界各地的PyCon风起云涌。PyCon也来到China, 越来越多的开发者及用户开始使用Python。一句“人生 短,我用Python”的中文贴在Guido的胸前被人发现,更是把Python推向G 点;-)。如此一来,Python这门语言连一个标准的打包生态系统都没有,这让强大而活跃的Python社区情何以堪。所以PyPAPython 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python打包的艺术(二)- Packaging Tools的昨天,今天,明天 的相关文章

随机推荐

  • C语言的数据类型大全,整型数据在内存中的存储方式

    一 数据类型 通过长时间的学习C语言以及代码的编写 我掌握了很多很多的数据类型 下面就给大家罗列一下 1 内置数据类型 char 字符数据类型 所占内存空间1字节 short 短整型 所占内存空间2字节 int 整形 所占内存空间4字节
  • java 超市购物程序设计

    编写一个超市购物程序 在一家超市有以下商品 牙刷 8 8元 毛巾 10 0元 水杯 18 8元 苹果 12 5元 香蕉 15 5元 用户通过输入商品序列号进行商品购买 用户输入购买数量后计算所需花费的钱 一次购买后 按Y继续购买 N购买结束
  • shell脚本学习笔记 (sed的高级用法----模式空间和保持空间)

    前段时间在学习shell脚本 上次有提到sed的模式空间和保持空间概念 但是一直没有研究好 这两天研究了一下 所以将它发出来 不是很全面 仅仅供大家参考一下 保持空间sed在正常情况下 将处理的行读入模式空间 脚本中的 sed comman
  • ES词典热加载-通过修改ik分词器源码实现热加载自定义词典

    逻辑 自定义词典的数据从mysql加载 只需要重启一次ES即可 后续热加载 实现 在自定义词典的init方法中实现每隔一定时间读取mysql并写入自定义词典的逻辑
  • 【微信小程序】小程序之滚动页面的某个元素位置

    这种效果基本上都是在文章详情页面才会出现 用于点击按钮页面滚动到文章的评论位置 但是不排除可以用于别的功能 首先我们需要用到的是在小程序里面获取某一个元素的位置高度 var that this var flag that data flag
  • java基础之 IO 流(InputStream/OutputStream)

    基流 上图中有句话写错了 应该是 字节流的根类 文件输出 入字节流 代码示例 心得 读写文件流 关心 读的时候读多少 写的时候写多少 它没有限制一次只能读 写多少 文件流的创建 到 文件流的关闭 为一个周期 package IOTest i
  • 肝2022世界杯,怒写企业级镜像私仓Docker+Harbor实践

    2022 12 09 揭幕2022卡塔尔世界杯4强角逐的第一天 越来越精彩了 同时记录程序猿的成长 1 背景 由于期望搭建一个企业级CICD的环境 开始尝试常规的gitlab jenkins k8s docker harbor spring
  • 997. 找到小镇的法官

    题目描述 小镇里有 n 个人 按从 1 到 n 的顺序编号 传言称 这些人中有一个暗地里是小镇法官 如果小镇法官真的存在 那么 小镇法官不会信任任何人 每个人 除了小镇法官 都信任这位小镇法官 只有一个人同时满足属性 1 和属性 2 给你一
  • 从0开始的 TypeScriptの十四:内置工具类型

    序 在之前的 从0开始的TypeScript 十三 中 已经对typescript的工具类型中的关键字infer extends keyof typeof in这些有所了解了 那么接下来为了使用更加方便 可以对typescript中内置的工
  • 【MATLAB】【函数介绍】cp2tform函数从控制点对推断空间变换

    官方链接 https ww2 mathworks cn help images ref cp2tform html s tid doc ta cp2tform函数的作用是根据传入的控制点对的坐标推断空间变换参数 函数语法如下 从控制点对推断
  • 【华为OD机试】服务失效判断【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 某系统中有众多服务 每个服务用字符串 只包含字母和数字 长度 lt 10 唯一标识 服务间可能有依赖关系 如A依赖B 则当B故障时导致A也故障 依赖具有传递性 如A依
  • QSettings修改配置文件的bug

    QT 使用QSettings类的bug 问题描述 原因分析 解决方案 问题描述 settings beginGroup mainwindow settings setValue size win gt size settings setVa
  • [转]shell中wait命令详解

    wait命令介绍 wait 作业指示或进程号 1 等待作业号或者进程号制定的进程退出 返回最后一个作业或进程的退出状态状态 如果没有制定参数 则等待所有子进程的退出 其退出状态为0 2 如果是shell中等待使用wait 则不会等待调用函数
  • Python 百分比计算

    遇到计算百分比的情况 查了一下 有两种方式 具体实现方式见下面代码 方式1 格式化为float 然后 处理成 格式 需要对分子 分母 100如下 percentList append 2f format member denominator
  • 51单片机蓝桥杯学习记录2独立按键

    51单片机蓝桥杯学习记录 独立按键这一块是比较简单的 就是读一下io口的高低电平 用普通函数写和用中断写还是有些不一样的 要注意的还是消抖和重复触发的问题 不说了 上码 author 风行天 time 2020 01 16 include
  • 初识云计算————虚拟化背景

    VM 虚拟机 Virtual Machine 虚拟化背景 美国环境保护署 EPA 报告的一组有趣的统计数据就证明了其好处 EPA 研究服务器和数据中心的能源效率时发现 实际上服务器只有 5 的时间是在工作的 在其他时间 服务器都处于 休眠
  • 字节和比特简单介绍

    字节 byte 字节为Byte 多数用B表示 字节为计算机中数据处理的基本单位 比特 bit 又称位 表示二进制位 为计算内部数据存储的最小单位 关系 1Byte 8bit 其他单位 1B Byte 字节 8bit 1KB Kilobyte
  • redis的数据类型string和list

    学习笔记记录 方便以后查看 一 Redis简介 1 关于关系型数据库和nosql数据库 关系型数据库是基于关系表的数据库 最终会将数据持久化到磁盘上 而nosql数据 库是基于特殊的结构 并将数据存储到内存的数据库 从性能上而言 nosql
  • 文献精讲-弱小目标检测-ADMD方法

    分享一下个人对于近期读过的一篇文献 Fast and robust small infrared target detection using absolute directional mean difference algorithm 的
  • Python打包的艺术(二)- Packaging Tools的昨天,今天,明天

    本文转载至 http blog chinaunix net uid 15174104 id 4036539 html 截至今年3月 Python的打包工具链处于的状态可以用 非常混乱 来形容 除了官方的distutils 第三方有setup