BuildrootでターゲットシステムにPython外部モジュールをインストールする方法

Buildrootにはシステム構築時にPythonの外部モジュールをインストールする仕組みが備わっている。比較的メジャーな外部モジュールはBuildrootのメニューの中に選択肢がデフォルトで用意されている他、それ以外もPyPIに登録されていればインストール出来る場合がある。ネット環境が無かったりメモリが貧弱なSBCではこのような仕組みは有り難い。以下、方法をまとめる。

スポンサーリンク

BuildrootメニューにあるPython外部モジュールはチェックを入れるだけ

メジャーな外部モジュールならBuildrootメニューの中から選択可能。インストールしたいパッケージにチェックを入れたら、あとはmake実行でBuildrootの全体ビルドをすればシステムイメージの中にPython外部モジュールが自動的にインストールされる。

Python外部モジュールのメニューに到達する方法は、メニューを順番に辿る方法と、キーワード検索の2通りがある。

Buildrootメニューから探す

Buildrootメニューを順番に辿りPythonパッケージ一覧を表示して探す方法。インストール可能な外部モジュールを一覧確認しながら選びたい時はこれで良いだろう。

  • Target packages
    • Interpreter languages and scripting
      • python3
        • External python modules

キーワード検索で探す

パッケージ名で検索も出来る。例えばnumpyのインストールをしたい場合は、以下の手順でOKだ。

  1. Buildrootの画面でキーボードから”/”(スラッシュ)入力すると検索画面になるので、numpyを入力してEnter。
    BR検索
  2. 検索候補の中から所望の物を探し、カッコの中の番号を押してメニューにジャンプする。この場合は”1″を押すとジャンプ。
    BR検索
  3. numpyのPythonパッケージ選択画面に飛ぶので、チェックを入れてnumpyインストール準備が完了する。
    BR検索

scanpypiを使う

scanpypiはBuildrootトップディレクトリ下util/に置かれているPythonスクリプト。Buildrootのメニューに無くてもPyPIに登録されているパッケージならscanpypiを使った以下の手順でインストール出来る場合がある。(うまく行くとは限らず、「インストール出来たらラッキー」ぐらいのイメージ)

対象PythonパッケージのPyPI登録名が’foo’のとき、

  1. まずは以下を実行
    utils/scanpypi 'foo' -o package
    この実行によってBuildrootのメニューに登録されているPython追加パッケージと同等の情報がPyPIサーバからダウンロードされ、Buildrootトップディレクトリ下package/python-‘foo’/へとコピーされる。
  2. package/Config.inをエディタで開いて、”External python modules”セクションに以下の1行を追加する。
    source "package/python-'foo'/Config.in"
  3. make menuconfig実行でBuildrootインストールメニューを開く
  4. インストールメニューの外部Pythonパッケージ一覧にデフォルトの物と同様に’foo’が選択肢として選べる状態になっているので、デフォルトの物と同じ手順でチェックを入れる(キーワード検索も可能)

scanpypiでも駄目な時

上記の通り、PyPIに登録されているパッケージ全てがscanpypiを使ってインストール出来るわけではなく、中には駄目な物も存在する。

例えば、rpycというモジュールはscanpypiだとエラーで追加出来なかった。が、同じ壁にぶち当たった人がBuildroot用の設定をGitHubに公開してくれており、下記GitHubサブディレクトリをpackage/の下にコピーしたうえで、package/Config.inの”External python modules”セクションにrpycのエントリを追加すればインストール出来た。

https://github.com/AndreasPantle/BuildrootPackages/tree/main/python-rpyc

scanpypiが駄目でも諦めずに探すと方法が見つかる場合もあるようだ。

まとめ

Buildrootを使ってPythonパッケージをシステムイメージにプリインストールする手順をまとめた。ターゲット上でpipが普通に使えればPythonパッケージのプリインストールなんて不要だが、リソースが貧弱なLichee Pi NanoのようなSBCでは有効な方法だと思う。

コメント