Piwheels 自动化为 PyPI(Python 包索引)上的所有项目构建 Python wheel(预编译的 Python 包),使用 Raspberry Pi 硬件以确保兼容性。这意味着当 Raspberry Pi 用户想要使用 pip 安装 Python 库时,他们会获得一个现成的编译版本,保证可以在 Raspberry Pi 上运行。这使得 Raspberry Pi 用户更容易上手并开始他们的项目。

当我于 2018 年 10 月撰写 piwheels:为 Raspberry Pi 快速安装 Python 包 时,piwheels 项目正处于第一年,并且已经证明了其节省 Raspberry Pi 用户大量时间和精力的目的。但是,该项目(为 Raspberry Pi 提供预编译的 Python 包)在其第二年中取得了长足的进步。

工作原理
Raspbian(Raspberry Pi 的主要操作系统)预配置为使用 piwheels,因此用户无需执行任何特殊操作即可访问 wheel。
配置文件(位于 /etc/pip.conf)告诉 pip 使用 piwheels.org 作为附加索引,因此 pip 首先查看 PyPI,然后查看 piwheels。Piwheels 网站托管在 Raspberry Pi 3 上,并且该项目构建的所有 wheel 都托管在该 Pi 上。它每月提供超过 100 万个软件包 - 对于一台 35 美元的计算机来说还不错!
除了运行网站的主要 Raspberry Pi 之外,piwheels 项目还使用其他七个 Pi 来构建软件包。一些运行 Raspbian Jessie,为 Python 3.4 构建 wheel,一些运行 Raspbian Stretch 为 Python 3.5 构建 wheel,还有一些运行 Raspbian Buster 为 Python 3.7 构建 wheel。该项目通常不支持其他 Python 版本。还有一个“真正的服务器”——运行 Postgres 数据库的虚拟机。由于 Pi 3 只有 1GB 的 RAM,因此(非常大的)数据库在其上运行不佳,因此我们将其移至 VM。具有 4GB RAM 的 Pi 4 可能适合,因此我们将来可能会迁移到此。
这些 Pi 都位于“Pi 云”中的仅 IPv6 网络上,这是一项由位于剑桥的托管公司 Mythic Beasts 提供的出色服务。

下载和趋势
每次 wheel 文件被下载时,都会记录在数据库中。这提供了对哪些软件包最受欢迎以及人们正在使用哪些 Python 版本和操作系统的洞察。我们没有来自用户代理的太多信息,但是由于 Pi 1/Zero 的架构显示为“armv6”,而 Pi 2/3/4 显示为“armv7”,因此我们可以区分它们。
截至 2019 年 12 月中旬,piwheels 已下载超过 1400 万个软件包,仅 2019 年就下载了近 900 万个。
自项目启动以来,最受欢迎的 10 个软件包是
- pycparser (821,060 次下载)
- PyYAML (366,979)
- numpy (354,531)
- cffi (336,982)
- MarkupSafe (318,878)
- future (282,349)
- aiohttp (277,046)
- cryptography (276,167)
- home-assistant-frontend (266,667)
- multidict (256,185)
请注意,许多纯 Python 软件包(例如 urllib3)在 PyPI 上以 wheel 形式提供;由于这些软件包跨平台兼容,因此通常不会从 piwheels 下载,因为 PyPI 具有优先权。
我们还看到了 Python 版本随时间推移的使用趋势。这显示了 Raspbian Buster 发布后 Python 3.7 从 3.5 的快速接管

您可以在我们的 统计博客文章中查看更多趋势。
节省的时间
每个软件包构建都记录在数据库中,并且每个下载也存储在数据库中。将下载与构建持续时间进行交叉引用,可以显示节省了多少时间。一个例子是 numpy——最新版本大约需要 11 分钟才能构建。
到目前为止,piwheels 总共为用户节省了超过 165 年的构建时间。按照目前的用量,piwheels 每天节省超过 200 天。
除了节省构建时间外,拥有预编译的 wheel 还意味着人们不必安装各种开发工具来构建软件包。某些软件包需要其他 apt 软件包才能访问共享库。弄清楚你需要哪些软件包可能很麻烦,因此我们也简化了这一步骤。首先,我们弄清楚了流程,并在 我们的博客上记录了它。然后,我们将此逻辑添加到构建过程中,以便在构建 wheel 时,其依赖项会自动计算并添加到软件包的项目页面

piwheels 的下一步是什么?
我们今年推出了项目页面(例如,numpy),这是一种非常有用的方式,可以让人们以人类可读的方式查找有关项目的信息。它们还使人们更容易报告问题,例如项目从 piwheels 中丢失或他们下载的软件包存在问题。
在 2020 年初,我们计划推出一些 piwheels 升级,这将启用新的 JSON API,因此您可以自动检查哪些版本可用,查找项目的依赖项以及更多内容。
下一个 Debian/Raspbian 升级将在 2021 年年中才会发生,因此在此之前我们不会开始为任何新的 Python 版本构建 wheel。
您可以在该项目的 博客上阅读有关 piwheels 的更多信息,我将在 2020 年初发布 2019 年回顾。您也可以在 Twitter 上关注 @piwheels,您将在那里看到每日和每月统计数据以及达到的任何里程碑。
当然,piwheels 是一个开源项目,您可以在 GitHub 上查看整个项目的 源代码。
2 条评论