以前Raspberry Pi 5の環境構築に関する記事を書きました。
その後色々調べていると、どうやらデフォルトの状態ではpipでのインストールができないということを知ったので、それを解決するための備忘録になります。
詳しくは参考資料に挙げているページ様を参照してください。
では、始めます。
0:デフォルトの状態でpip installをしてみる
Raspberry Pi 5にRaspberry Pi OS(64bit)を入れた状態で、以下のようにpipからOpenCVを入れるコマンドを実行してみます。
pip install opencv-pyhton
すると以下のようなエラーが出てインストールが実行されません。
$ pip install opencv-pyhton 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.
これはどうやらpip 23から導入された「PEP668」というのが原因らしく、要は「仮想環境以外でpip installをできないようにする」対応だそうです。
とりあえず現状そのままのコマンドだと動かないので、使えるようにしていきます。
1:ちゃんとした対応方法
正式?な対応方法を最初に書いておきます。
まず最初にpip installするプロジェクトのディレクトリを作成します。ディレクトリ名はなんでもよいですがここでは「test_pip」として話を進めます。
mkdir test_pip
pip installするプロジェクトディレクトリを作成したら、そのディレクトリに移動します。
cd test_pip
対象ディレクトリに移動したら、以下のコマンドを実行します。「'test_pip'」の部分は対象ディレクトリの名前に各自修正してください。
python -m venv --system-site-packages --clear --prompt 'test_pip' --upgrade-deps $(pwd)/.venv
このコマンドは1分ほど時間がかかるので、終了するまで待ちます。
終了すると対象ディレクトリ内に「.env/bin/」のフォルダができています。その中にpipやpythonなどが入っているかを以下のコマンドで確認します。
ls .venv/bin/
自分の場合は実行すると以下のようにちゃんとpipとpythonが入っていました。
$ ls .venv/bin/ Activate.ps1 activate activate.csh activate.fish pip pip3 pip3.11 python python3 python3.11
これでプロジェクトのディレクトリ内の仮想環境の準備ができたので、以下のコマンドで仮想環境を適応させます。
source .venv/bin/activate
仮想環境を適応させると、以下のように「(プロジェクト名)」がユーザ名などの前につくようになります。
(test_pip) $
この状態で「command -v python」で仮想環境に入っているpythonを確認すると、仮想環境下でのpythonが使われていることがわかります。
/test_pip/.venv/bin/python
この状態であれば「pip install」コマンドや「pip install -r requirements.txt」も実行できるようになっています。
仮想環境から抜ける場合は以下のコマンドで抜けることができます。
deactivate
つまりは「source .venv/bin/activate」コマンドで仮想環境を読み込み、その状態でpip installを実行し、deactivateで仮想環境から抜けるという形になります。
2:手っ取り早く解決する方法
1の方法が一番望ましい方法だと思いますが、一応強制的にpip installできるオプションがあります。
以下のようにコマンドの末尾に「--break-system-packages」を付けるだけです。
pip install [パッケージ名] --break-system-packages
ちなみにuninstallする時も同じオプションを付けてあげれば実行できます。
pip uninstall [パッケージ名] --break-system-packages
ただしこれは強制的に実行しているので、あまり推奨はされないようです。
以上がpip installを使えるようにする方法になります。
今回はRaspberry Pi 5での方法でしたが、pip 23以降のバージョンでは起こり得る可能性があるので知っておくと良いかもしれません。
・参考資料