即便你对将代码开源分发不感兴趣,也应该知道如何创建一个完整的包,因为这可以让你深入了解打包生态系统,有助于使用 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 上传包的发行版。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/23051.html