pip install が「error: externally-managed-environment」で失敗する(PEP 668)
システムの Python に pip install すると externally-managed-environment で弾かれるのは PEP 668 の保護。
OS のパッケージ管理と衝突させないための仕組みで、仮想環境か pipx を使うのが正攻法。
#pip#pep-668#venv#break-system-packages#install
公開:
要約
error: externally-managed-environment は、その Python が「OS など外部のパッケージ管理に任されている」とマークされているのに、pip で直接パッケージを入れようとしたときに出る。
Python 3.11・pip 23.0 以降が PEP 668 のマーカー(EXTERNALLY-MANAGED ファイル)を見て、仮想環境の外での書き換えを止めている。
OS のパッケージと pip が同じ場所を取り合って壊れるのを防ぐためで、回避ではなく仮想環境か pipx へ寄せるのが正攻法。
よくある原因
- システム Python に直接 install: Debian/Ubuntu や Homebrew が入れた Python に、venv の外から
pip installしている。 - マーカーの存在: ディストリ側が標準ライブラリのフォルダに
EXTERNALLY-MANAGEDを置いており、pip がそれを検知している。 - sudo での全体導入:
sudo pip installでシステム全体を書き換えようとしている。 - venv 有効化忘れ: 仮想環境を作ったのに有効化しておらず、システム側へ入りかけている。
解決策
1. 仮想環境を使う(推奨)
プロジェクト直下に venv を作り、有効化してから入れる。
python -m venv .venv
source .venv/bin/activate # Windows は .venv\Scripts\activate
pip install requests有効化中はマーカーの対象外なので、この警告は出ない。
2. CLI ツールは pipx
コマンドとして使うツール(black, httpie 等)は pipx で隔離する。
pipx install black3. どうしてもシステムに入れるとき
壊れても自分で直せる前提で、明示的に許可フラグを付ける。
pip install --break-system-packages SomePackageOS が用意するパッケージがあるなら apt install python3-requests のように OS 側で入れるほうが安全。