ラズベリーパイbookwormのPython環境

ラズベリーパイOS Bookworm からPythonの実行環境周りが変更されたため、pipでそのままモジュールをインストールしたりすることができなくなりました。

ラズベリーパイbookwormのPython環境

これまで実行できていたpip3 コマンドなどがOSインストール直後に実行できなくなったので対応方法です。

仮想環境がデフォルト導入された
bookwormからはPythonを実行する環境が変更されました。仮想化にはライブラリを分離できるなどのメリットもありますが、以前のOS向けに書かれたチュートリアルなどは適宜読み替えが必要になります。
仮想環境とは
世の中には様々な仮想化の仕組みがあります。OSレベルで分離されたり、コンテナやハードウェアをエミュレートしたりと本当にピンキリです。この記事での仮想環境は venv を利用したもので、仮想化というよりはパスの切り替えによってライブラリを切り替えることができるという感じになります(それを仮想化というのなら確かにそう)

うぉー動かねー

問題点は何か

まずは以前まで何もせず実行できていたライブラリのインストールコマンドを実行してみると以下のようなエラーメッセージが表示されます。

kota@pi4:~ $pip3 install termcolor
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.
    
    For more information visit http://rptl.io/venv

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

えっ、困る・・

ではエラーメッセージを見ていきましょう。

error: externally-managed-environment

まずここでは、"externally-managed-environment"つまり、外部で管理されている環境です。とあります。そのために動かなかったのですね。

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

そしてここでは、システム全体にインストールしたいのなら apt install python3-xyzのように実行してねと書かれています。

MEMO

system-wide には様々な別名がありますが、グローバルなどとも呼ばれます。意味としてはラズベリーパイOS上で別のユーザーを作成していても、そのユーザーに影響が出ます。そのため複数のPythonプログラムを動作させてているラズベリーパイでは若干注意が必要です。

原因はわかったのでどうする

システム全体にインストールしても良いのですが、今回は仮想環境をセットアップする方法でやっていきます。

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

では、この説明に書かれている通り以下のコマンドを実行してみると言いたいところですが、最後の"path/to/venv"は仮想環境へのパスになりますので、そこだけ置き換えて実行します。

kota@pi4:~ $ cd

実行する前に"cd"コマンドでホームディレクトリに移動します。

kota@pi4:~ $ python3 -m venv default

今回は、defaultという名前にしました。

kota@pi4:~ $ ls
Bookshelf  Desktop    Downloads      fdk-aac-2.0.2.tar.gz  Music  Pictures  Templates  workspace
default    Documents  fdk-aac-2.0.2  ffmpeg                picam  Public    Videos

defaultフォルダがある

仮想化された環境でインストール

では仮想環境内のコマンドでインストールをしていきます。

kota@pi4:~ $ ./default/bin/pip3 install termcolor
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting termcolor
  Downloading https://www.piwheels.org/simple/termcolor/termcolor-2.4.0-py3-none-any.whl (7.7 kB)
Installing collected packages: termcolor
Successfully installed termcolor-2.4.0

無事動いた!

パッケージのインストールができたのであとはもうこっちのものです。

仮想化された環境で実行する

実行はこれまで python3 と実行していた箇所を作成した仮想化環境の python3 に置き換えます。具体的には以下のようにコマンドを書き換えます。

python3 code.py

code.py を実行するコマンド(bookworm以前は動作していた)

~/default/bin/python3 code.py

仮想環境で code.py を実行するコマンド

最後に

よくエラーメッセージを読めば基本的に全部書いてあるので、落ち着いて1行づつ意味を確認するとなんとかなります。

他のエラーの際も同様にメッセージが出力されている場合はなんとかなる場合が多いので落ち着いて1行ずつ意味を確認して進めるが吉です。

結局読まずにChatGPTとかに聞いちゃうんですけどね!

記事の内容は間違いが無いように気をつけていますが、私の認識違いや、ミスなどにより間違っている可能性もあります。もし発見された場合はお問い合わせフォームよりご連絡頂けると幸いです。