Linux中國

piwheels 是如何為樹莓派用戶節省時間的

piwheels 自動為 Python 包索引 PiPi 上的所有項目構建 Python wheels(預編譯的 Python包),並使用了樹莓派硬體以確保其兼容性。這意味著,當樹莓派用戶想要使用 pip 安裝一個 Python 庫時,他們會得到一個現成編譯好的版本,並保證可以在樹莓派上良好的工作。這使得樹莓派用戶更容易入門並開始他們的項目。

![Piwheels logo](/data/attachment/album/202001/15/130602uqi3h3dccmywaize.png "Piwheels logo")

當我在 2018 年 10 月寫 piwheels:為樹莓派提供快速 Python 包安裝時,那時 piwheels 項目已經有一年了,並且已經證明了其為樹莓派用戶節省大量時間和精力。但當這個項目進入第二年時,它為樹莓派提供了預編譯的 Python 包做了更多工作。

![Raspberry Pi 4](/data/attachment/album/202001/15/130617kaq1wl5dtkbtbk93.jpg "Raspberry Pi 4")

它是怎麼工作的

樹莓派的主要操作系統 Raspbian 預配置使用了 piwheels,所以用戶不需要做任何特殊的事情就可以使用 piwheels。

配置文件(在 /etc/pip.conf)告訴 pip 使用 piwheels.org附加索引,因此 pip 會首先查找 PyPI,然後查找 piwheels。piwheels 的網站被託管在一個樹莓派 3 上,該項目構建的所有 wheels 都託管在該樹莓派上。它每月提供 100 多萬個軟體包——這對於一台 35 美元的電腦來說還真不賴!

除了提供網站服務的主樹莓派以外,piwheels 項目還使用其他七個樹莓派來構建軟體包。其中一些運行 Raspbian Jessie,為 Python 3.4 構建 wheels;另外一些運行 Raspbian Stretch 為 Python 3.5 構建;還有一些運行 Raspbian Buster 為 Python 3.7 構建。該項目通常不支持其他 Python 版本。還有一個「合適的伺服器」——一台運行 Postgres 資料庫的虛擬機。由於樹莓派 3 只有 1GB 的內存,所以(非常大的)資料庫不能在其上很好地運行,所以我們把它移到了虛擬機上。帶 4GB 內存的樹莓派 4 可能是合用的,所以我們將來可能會用到它。

這些樹莓派都在「派雲」中的 IPv6 網路上——這是一項由總部位於劍橋的託管公司 Mythic Beasts 提供的卓越服務。

![Mythic Beasts hosting service](/data/attachment/album/202001/15/130620zqgwxgwerph9x92x.png "Mythic Beasts hosting service")

下載和統計趨勢

每次下載 piwheels 文件時,它都會記錄在資料庫中。這提供了對什麼包最受歡迎以及人們使用什麼 Python 版本和操作系統的統計。我們沒有太多來自用戶代理的信息,但是因為樹莓派 1/Zero 的架構顯示為 「armv6」,樹莓派 2/¾ 顯示為 「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 上的 wheels 提供的;因為這些是跨平台兼容的,所以通常不會從 piwheels 下載,因為 PyPI 優先。

隨著時間的推移,我們也看到了使用哪些 Python 版本的趨勢。這裡顯示了 Raspbian Buster 發布時從 3.5 版快速升級到了 Python 3.7:

![Data from piwheels on Python versions used over time](/data/attachment/album/202001/15/130622xlastfvfrr5uluoh.png "Data from piwheels on Python versions used over time")

你可以在我們的這篇 統計博文 看到更多的統計趨勢。

節省的時間

每個包構建都被記錄在資料庫中,並且每個下載也被存儲。交叉引用下載數和構建時間顯示了節省了多少時間。一個例子是 numpy —— 最新版本大約需要 11 分鐘來構建。

迄今為止,piwheels 項目已經為用戶節省了總計超過 165 年的構建時間。按照目前的使用率,piwheels 項目每天可以節省 200 多天。

除了節省構建時間,擁有預編譯的 wheels 也意味著人們不必安裝各種開發工具來構建包。一些包需要其他 apt 包來訪問共享庫。弄清楚你需要哪一個可能會很痛苦,所以我們也讓這一步變得容易了。首先,我們找到了這個過程,在博客上記錄了這個過程。然後,我們將這個邏輯添加到構建過程中,這樣當構建一個 wheels 時,它的依賴關係會被自動計算並添加到包的項目頁面中:

![numpy dependencies](/data/attachment/album/202001/15/130622zhjvhd43jxl3hkqn.png "numpy dependencies")

piwheels 的下一步是什麼?

今年,我們推出了項目頁面(例如,numpy),這是一種非常有用的方式,可以讓人們以人類可讀的方式查找項目信息。它們還使人們更容易報告問題,例如 piwheels 中缺少一個項目,或者他們下載的包有問題。

2020 年初,我們計劃對 piwheels 項目進行一些升級,以啟用新的 JSON 應用編程介面,這樣你就可以自動檢查哪些版本可用,查找項目的依賴關係,等等。

下一次 Debian/Raspbian 升級要到 2021 年年中才會發生,所以在那之前我們不會開始為任何新的 Python 版本構建 wheels。

你可以在這個項目的博客上讀到更多關於 piwheels 的信息,我將在 2020 年初在那裡發表一篇 2019 年的綜述。你也可以在推特上關注 @piwheels,在那裡你可以看到每日和每月的統計數據以及任何達到的里程碑。

當然,piwheels 是一個開源項目,你可以在 GitHub 上看到整個項目源代碼。

via: https://opensource.com/article/20/1/piwheels

作者:Ben Nuttall 選題:lujun9972 譯者:heguangzhi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國