Python 编程语言的优点之一是 PyPI,即 Python 包索引,第三方库托管于此,任何人都可以安装并访问预先存在的功能,而无需从头开始。 这些库是由社区成员编写的方便实用程序,在 Python 标准库中找不到。 但它们的工作方式非常相似——您将它们导入到您的代码中,并可以访问您自己没有编写的函数和类。
跨平台问题
PyPI 上托管的 150,000 多个库中有许多是用 Python 编写的,但这并不是唯一的选择——您可以使用 C、C++ 或任何带有 Python 绑定的语言编写 Python 库。 使用 C 或 C++ 编写库的通常好处是速度。 NumPy 项目就是一个很好的例子:NumPy 为处理矩阵运算提供了强大的数学功能。 它是高度优化的代码,允许用户用 Python 编写代码,但可以访问快速的数学运算。
当尝试分发库供其他人跨平台使用时,问题就出现了。 标准是创建称为 Python wheel 的构建分发包。 虽然纯 Python 库自动跨平台兼容,但那些用 C/C++ 实现的库必须为每个操作系统、Python 版本和系统架构单独构建。 因此,如果一个库想要支持 Windows、MacOS 和 Linux,以及 32 位和 64 位计算机,并且支持 Python 2.7、3.4、3.5 和 3.6,那将需要 24 个不同的版本! 有些软件包会这样做,但另一些软件包则依赖用户从源代码构建软件包,这可能需要很长时间,而且通常很复杂。
树莓派和 Arm
虽然树莓派运行 Linux,但它的架构与您的普通 PC 不同——它是 Arm,而不是 Intel。 这意味着 Linux wheel 无法工作,树莓派用户必须从源代码构建——直到 piwheels 项目去年实现。 Piwheels 是一个开源项目,旨在为 PyPI 上的每个软件包构建树莓派平台 wheel。

软件包在树莓派 3 硬件上本地编译,并托管在英国 Mythic Beasts 提供的数据中心中,该公司提供云树莓派作为其托管服务的一部分。 piwheels 网站以 pip 兼容的 Web 服务器配置托管 wheel,以便树莓派用户可以轻松使用它们。 Raspbian Stretch 甚至预配置为默认使用 piwheels.org 作为 PyPI 的附加索引。
piwheels 堆栈
piwheels 项目(几乎)完全在树莓派硬件上运行
- 主服务器
- 树莓派 Web 服务器托管 wheel 文件并将作业分发给构建器树莓派。
- 数据库服务器
- 所有软件包信息都存储在 Postgres 数据库中。
- 主服务器记录构建尝试和下载。
- 构建器
- 构建器树莓派被赋予构建作业以尝试,并且它们与数据库通信。
- PyPI 上的软件包积压是使用大约 20 个树莓派完成的。
- 保持与新版本同步所需的树莓派数量较少。 目前,有三个运行 Raspbian Jessie(Python 3.4),两个运行 Raspbian Stretch(Python 3.5)。
数据库服务器最初是一台树莓派,但当数据库变得太大时,已迁移到另一台服务器。

节省的时间
每月从 piwheels.org 下载大约 500,000 个软件包。
每次软件包由 piwheels 构建或由用户下载时,其状态信息(包括构建持续时间)都会记录在数据库中。 因此,可以计算出使用预编译软件包节省了多少时间。
在该服务运行的 10 个月内,节省了超过 25 年的构建时间。
非常适合项目
需要 Python 库的树莓派项目教程通常包含“此步骤需要几个小时”之类的警告——但这已不再是事实,这要归功于 piwheels。 Piwheels 使创客和开发者可以轻松地直接投入到他们的项目中,而不会因等待软件安装而陷入困境。 强大的库只需 pip install 即可获得; 无需等待编译。
Piwheels 拥有 NumPy、SciPy、OpenCV、Keras 甚至 Tensorflow(Google 的机器学习框架)的 wheel。 这些库非常适合 家庭项目,包括使用 摄像头模块 进行图像和面部识别。 如需灵感,请查看 PyImageSearch 上的树莓派类别(这是我 最喜欢的树莓派博客 之一)进行关注。

在项目的博客和树莓派博客上阅读更多关于 piwheels 的信息,查看GitHub 上的源代码,并查看piwheels 网站。 如果您想为该项目做贡献,请查看缺失软件包标签,看看您是否可以成功构建其中一个。
评论已关闭。