目录
前言
鸽了那么久终于决定把坑填完……本篇打算承接上一篇,讲讲python wheel包的创建。原则上需要涵盖的内容挺多的,但碍于篇幅只能把最相关的部分提炼出来。一般的开发者需要用到这部分内容的其实不多,但谁知道呢——也许哪一天愿意为开源社区提供自己写的程序包时,希望这篇博客能带来一定的指导。
前置准备
python的打包工具有很多,setuptools
虽然已不能算是默认,但仍是目前最为流行的一种。首先,得确认自己的系统上有wheel
和setuptools
两个模块:
pip install wheel setuptools --user
setuptools
是用来完成打包动作的wheel
是setuptools
的一个衍生插件,提供一些命令行指令用于和wheel包交互
一、wheel包的种类
- Universal wheel:带有
py2.py3-none-any.whl
在名字中的包。对python2和python3、操作系统等均没有要求,兼容性极好。 - Pure-python wheel:带有
py3-none-any.whl
或py2-none-any.whl
在名字中的包。和universal wheel相比,仅仅在python的版本上有所要求。 - Platform wheel:对python版本和操作系统等都会有要求。创建这种类型的wheel一般意味着内部使用了一些由静态语言编写的代码(如C++)。这些代码在编译时会对平台有所要求,所以造成wheel包也会有平台依赖。
pip install
在执行的时候会去寻找和当前环境兼容的版本,如果未找到兼容的版本,但是找到源发行版的话,会下载源发行版在本地进行编译安装;如果源发行版也找不到,那安装就会报错了。
二、wheel包的打包过程
2.1 pyproject.toml
pyproject.toml
是在PEP518中被引入作为注明一个Python项目要用到什么编译工具的。在此之前人们没有办法让程序自动获知一个项目打包成wheel过程中需要的编译工具。除了PEP518之外,PEP517还指明了如何使用编译工具来完成打包编译,进一步实现了整体过程的标准化,统一了不同的编译工具和流程。当然,它们带来的好处还有一些,在这里暂不展开。
对于setuptools
用户来说,以下的内容,阐明一下setuptools的版本就够了:
[build-system]
requires = ["setuptools >= 40.6.0", "wheel"]
build-backend = "setuptools.build_meta"