Python打包的发展历程

Python 打包一开始可能有些难以理解,其主要原因是不了解创建 Python 包的正确工具。但不管怎样,一旦创建好第一个包,就会发现其实它并没有想象的那么难。

即便你对将代码开源分发不感兴趣,也应该知道如何创建一个完整的包,因为这可以让你深入了解打包生态系统,有助于使用 PyPI 上可用的第三方代码。此外,将闭源项目或者其组件编程源代码发行包,有助于你在不同的环境中部署代码。

Python打包的混乱状态

Python 打包曾经在很长一段时间内处于混乱不堪的状态,人们花了很多年才使其重新变得有组织。

一切都从 1998 年引入的 distutils 包开始,随后在 2003 年对 setuptools 进行改进,这两个项目开启了一段漫长而又纠结的故事,包括派生(fork),替代项目与完全重新编写,都想要彻底修复 Python 的打包生态系统。

然而不幸的是,大部分尝试非但没有成功,每个想要取代 setuptools 或 distutils 的新项目都只是给打包工具十分混乱的状态添乱而己。其中,有些派生被合并回它们的祖先中(例如 setuptools 派生的 distribute),有些则直接被弃用(distutils2)。

这种混乱的状态直到成立了被称为 Python Packaging Authority(简称 PyPA)的组织,将秩序和组织性带回到打包生态系统中。PyPA 维护的 Python 打包用户指南(Python Packaging User Guide)是关于最新打包工具和最佳实践的权威信息来源。

这份指南包含详细的历史变化以及与打包相关的新项目,因此,如果你已经了解一些内容,但想要确保使用的是正确的工具,那么这份指南是很有用的。

Python打包的现状

PyPA 除了提供一份权威的打包指南之外,还维护着打包项目与新的官方打包的标准化过程,前面章节中己经提到过其中一些项目,最有名的例如 pip、virtualenv、twine 和 warehouseo。

有兴趣的读者可参阅 PyPA 官方网站做详细了解。

注意,其中大部分项目都是在这个组织之外开始的,只是作为一个成熟且广泛使用的解决方案迁移到 PyPA 下而已。

由于 PyPA 的参与,构建发行版已经正在逐步弃用 egg 格式,而是支持使用 wheel 格式,未来可能会带来全新的方法。另外,PyPA 正在积极开发 warehouse,其目的是完全替代当前的 PyPI 实现,这将是打包历史上迈出的一大步,因为 PyPI 是如此古老且被忽视的项目。

PyPA打包工具推荐

Python 打包用户指南有关使用包的推荐工具给出了一些建议。这些工具大体可分为两组,分别是用于安装包的工具和用于包的创建与分发的工具。

PyPA 推荐用于安装包的工具:
  • 使用 pip 安装来自 PyPI 的包。
  • 将 virtualenv 或 venv 用于 Python 环境的应用级隔离。

PyPA 推荐包的创建与分发的工具如下:
  • 使用 setuptools 来定义项目并创建源代码发行版。
  • 使用 wheel 而不是 egg 来构建发行版。
  • 使用 twine 向 PyPI 上传包的发行版。

编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「编程帮」,你已然超越了90%的程序员!

编程帮二维码
微信扫描二维码关注