Raspberry Pi 5のPython環境

はじめに

Raspberry Pi 5で、Python環境の構築に手間取った。
基本従来のRaspberry Pi OSでは特に気にすることなくシステムのPythonにライブラリをインストールして使用していたので、表面上は問題になっていなかった。また、Ubuntuではすでにバージョン23以上のpipを使用しているが、pyenvでシステムのPythonと切り離していたので問題に気がつかなかった。しかし、Raspberry Pi OSがBookwormに移行し、PEP668がデフォルトで有効になったことから問題が発覚した。

さらに困ったことに、Raspberry Pi OSにインストールされているPythonライブラリはpip installでインストールできるものとバージョンが異なる。システムと別のPython環境を単純に作るだけではうまく動作しない問題が生じた。したがって、Raspberry Pi OSのPython開発環境はシステムのライブラリを引き続き使えるような環境でなければならないという事になる。

ところで、PEP668とは…

Raspberry Pi OS Bookwormでは、PEP668がデフォルトで有効になっていることは前述した。
このPEP668の概要をBardにまとめてもらった。

PEP668は、Pythonのモジュールインポートを高速化するための提案です。2022年7月20日に正式にリリースされました。
PEP668では、Pythonのモジュールインポート時に、モジュールのソースコードを事前に読み込んでキャッシュすることで、インポートの時間を短縮します。これにより、モジュールの読み込みにかかる時間を大幅に短縮することができます。

PEP668の具体的な効果は、以下のとおりです。

  • モジュールの読み込みにかかる時間を平均で約30%短縮します。
  • モジュールの読み込みにかかる時間を最大で約90%短縮します。

PEP668は、Pythonのモジュールインポートのパフォーマンスを大幅に向上させるため、Pythonを使用する場合は、有効にしておくとよいでしょう。なお、PEP668は、強制力はありません。ユーザーの判断で、PEP668の推奨に従うか否かを決めることができます。

PEP668の具体的な内容は、以下のとおりです。

  • モジュールインポート時に、モジュールのソースコードを事前に読み込んでキャッシュする。
  • キャッシュは、モジュールのパス名とバージョン番号をキーとして保存する。
  • キャッシュは、モジュールが最初にインポートされたときに作成される。
  • キャッシュは、キャッシュの容量が不足した場合や、モジュールのソースコードが変更された場合に更新される。

PEP668の適用方法は、以下のとおりです。

  • Python 3.11以降では、デフォルトでPEP668が適用されます。
  • Python 3.10以前では、以下の方法でPEP668を適用します。
    • importlib.util.cache_module()関数を使用して、モジュールをキャッシュする。
    • importlib.util.find_spec()関数を使用して、キャッシュされたモジュールを取得する。

PEP668の注意点は、以下のとおりです。

  • ユーザーが自由にライブラリをインポートすると、不要なモジュールがキャッシュに登録され、パフォーマンスの低下や、セキュリティ上の脆弱性の原因になる可能性がある。
  • システムのPythonにユーザーがライブラリをpipでinstallすることは推奨されていない。

PEP668は、Pythonのモジュールインポートのパフォーマンスを向上させるための重要な提案です。Pythonを使用する場合は、PEP668の概要を理解し、適切に適用することで、パフォーマンスの向上を図ることができます。


以上のように、恩恵も多いが、pip installができなくなる点は不便なので、開発用とシステム用に分ければよい。そこで、システムのPython とユーザーが開発に使用するPython を分離する仮想環境について調べた。Ubuntuでは既に使っているpyenvであるが、virtualenvも使う必要がありそうだ。さらに、venvもある。

ところで、具体的にsystemのPythonに何かをインストールしようとすると次のような警告が出る。

Pythonのバージョン管理と仮想環境

具体的にpyenvのインストールは以下で、

エラー出た。

いろいろ足りていなかった模様。以前は次のライブラリをインストールしてた。

virtualenvをインストール。

任意のPythonをインストールできた。

--system-site-packages オプションの適用

システムのライブラリを引き続き利用しつつ、仮想環境を作る必要がある。見出しに記載しているオプションで目的を達成できる。
具体的には、

で、Documents以下を仮想環境へ

.bashrcの関連記述。これでactivate、deactivateせずに利用できる。

まとめ

これで、Raspberry Piに必要なライブラリを利用できる仮想環境を構築できた。なお、Raspberry Pi 5以前、この場合、Raspberry Pi 400の場合、普通にgpio関連のライブラリをpipでインストールしても問題ないかもしれない。Raspberry Pi 5BはI/O周りが大きく変更されているからだ。あるいは、このブログを書いた時点で5Bができないだけで、そのうち対応される可能性も高い。

つまり、本内容は当面の間の暫定的な対応かもしれない。仮想環境もディスコン予定の内容で、いずれvenvに移行する必要もあるしね…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA