pipの外部管理エラー対処法
冒頭まとめ pip installで次のエラーが出たら、使っているPythonがOSやHomebrewなどの管理対象になっている。パッケージ名や要求する版を変える前に、インストール先の環境を確認する。 error: externally-managed-environment × This environment is externally managed 自分のコードから読み込むライブラリは、プロジェクト用の仮想環境に入れる。仮想環境とは、Pythonのパッケージの保存先を分けた環境のこと。コマンドとして使うPython製ツールは、ツールごとに仮想環境を作るpipxを使う方法もある。 sudoで権限を上げたり、--userでユーザー用の保存先へ変えたりしても、この管理対象の検査は解除されない。まずはvenvで環境を分ける手順へ進む。 エラーが出るPythonを確認する エラーを出したPythonと同じ実行ファイルで確認する。以下はmacOS・Linuxでpython3を使っていた場合の例である。 python3 -m pip --version python3 -c "import sys; print(sys.executable); print('venv:', sys.prefix != sys.base_prefix)" python3 -c "import pathlib, sysconfig; p = pathlib.Path(sysconfig.get_path('stdlib')) / 'EXTERNALLY-MANAGED'; print(p); print('marker exists:', p.is_file())" pip --versionの出力にはpipの版と配置先が含まれる。裸のpipコマンドとpython3 -m pipで違うPythonを使っている場合があるため、以後は対象のPythonからpipを呼び出す。 venv: Falseで、標準ライブラリのディレクトリにEXTERNALLY-MANAGEDがあれば、この検査の条件に当てはまる。PyPAの現行仕様は、仮想環境の外であることと、この管理用ファイルの存在を検査するよう定めている。 ファイルは、パッケージを消してよいか調べるためではなく、そのPythonの管理元を確認するために見る。削除はしない。 OSやHomebrewの更新で出る理由 OSやHomebrewは、自分が提供したPythonとパッケージを管理している。そこへpipで別の版を入れると、管理元が想定した構成と食い違う可能性がある。管理用ファイルは、その環境を通常のpip操作で変更しないよう示すものだ。 pipの変更履歴では、このファイルを読む処理が23.0で追加されている。管理用ファイルを置くかどうかはPythonの提供元が決めるため、pipの版が新しいだけで必ず発生するわけではない。 Debian 12のリリースノートは、提供するPythonを外部管理対象にしたことと、ライブラリには仮想環境、アプリにはpipxを使う方針を説明している。Homebrewの現行文書も、現在提供するPythonの外部管理と仮想環境の利用を案内している。 エラー本文は環境ごとに変わる。管理用ファイルの[externally-managed]内にあるErrorや言語別の項目から案内を読むため、Debianのapt案内とHomebrewのbrew案内は同じ文面にはならない。適切な案内を読み取れなければpipの既定文面になる。空のファイルでも、存在による検査自体はなくならない。 venvのPythonからインストールする プロジェクトのディレクトリで、まだ使っていない.venvという名前に仮想環境を作る。 python3 -m venv .venv .venv/bin/python -m pip --version .venv/bin/python -m pip install requests requestsは例なので、必要なパッケージ名に置き換える。実行するコードも、同じ環境のPythonから呼ぶ。 ...