piwheels 如何在 2020 年为 Raspberry Pi 用户节省时间

通过为 Raspberry Pi 提供预编译的 Python 包,piwheels 项目为用户节省了大量时间和精力。
144 位读者喜欢这篇文章。

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

Piwheels logo

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

Raspberry Pi 4

工作原理

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 提供的出色服务。

Mythic Beasts hosting service

每次 wheel 文件被下载时,都会记录在数据库中。这提供了对哪些软件包最受欢迎以及人们正在使用哪些 Python 版本和操作系统的洞察。我们没有来自用户代理的太多信息,但是由于 Pi 1/Zero 的架构显示为“armv6”,而 Pi 2/3/4 显示为“armv7”,因此我们可以区分它们。

截至 2019 年 12 月中旬,piwheels 已下载超过 1400 万个软件包,仅 2019 年就下载了近 900 万个。

自项目启动以来,最受欢迎的 10 个软件包是

  1. pycparser (821,060 次下载)
  2. PyYAML (366,979)
  3. numpy (354,531)
  4. cffi (336,982)
  5. MarkupSafe (318,878)
  6. future (282,349)
  7. aiohttp (277,046)
  8. cryptography (276,167)
  9. home-assistant-frontend (266,667)
  10. multidict (256,185)

请注意,许多纯 Python 软件包(例如 urllib3)在 PyPI 上以 wheel 形式提供;由于这些软件包跨平台兼容,因此通常不会从 piwheels 下载,因为 PyPI 具有优先权。

我们还看到了 Python 版本随时间推移的使用趋势。这显示了 Raspbian Buster 发布后 Python 3.7 从 3.5 的快速接管

Data from piwheels on Python versions used over time

您可以在我们的 统计博客文章中查看更多趋势。

节省的时间

每个软件包构建都记录在数据库中,并且每个下载也存储在数据库中。将下载与构建持续时间进行交叉引用,可以显示节省了多少时间。一个例子是 numpy——最新版本大约需要 11 分钟才能构建。

到目前为止,piwheels 总共为用户节省了超过 165 年的构建时间。按照目前的用量,piwheels 每天节省超过 200 天

除了节省构建时间外,拥有预编译的 wheel 还意味着人们不必安装各种开发工具来构建软件包。某些软件包需要其他 apt 软件包才能访问共享库。弄清楚你需要哪些软件包可能很麻烦,因此我们也简化了这一步骤。首先,我们弄清楚了流程,并在 我们的博客上记录了它。然后,我们将此逻辑添加到构建过程中,以便在构建 wheel 时,其依赖项会自动计算并添加到软件包的项目页面

numpy dependencies

piwheels 的下一步是什么?

我们今年推出了项目页面(例如,numpy),这是一种非常有用的方式,可以让人们以人类可读的方式查找有关项目的信息。它们还使人们更容易报告问题,例如项目从 piwheels 中丢失或他们下载的软件包存在问题。

在 2020 年初,我们计划推出一些 piwheels 升级,这将启用新的 JSON API,因此您可以自动检查哪些版本可用,查找项目的依赖项以及更多内容。

下一个 Debian/Raspbian 升级将在 2021 年年中才会发生,因此在此之前我们不会开始为任何新的 Python 版本构建 wheel。

您可以在该项目的 博客上阅读有关 piwheels 的更多信息,我将在 2020 年初发布 2019 年回顾。您也可以在 Twitter 上关注 @piwheels,您将在那里看到每日和每月统计数据以及达到的任何里程碑。

当然,piwheels 是一个开源项目,您可以在 GitHub 上查看整个项目的 源代码

接下来阅读什么
User profile image.
Ben 是 BBC News Labs 的软件工程师,曾任 Raspberry Pi 的社区经理。他热衷于 Linux、Python 和所有开源事物!在 Twitter 上关注 Ben @ben_nuttall。

2 条评论

很高兴知道这一点。但是,我看到许多软件包建议使用“sudo pip install”,我了解到这是一种不良做法和安全风险,我应该使用它吗?

酷!我将与一群孩子一起使用 Raspberry Pi 和 Python,这将会派上用场。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.