できない.dev

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 へ寄せるのが正攻法。

よくある原因

  1. システム Python に直接 install: Debian/Ubuntu や Homebrew が入れた Python に、venv の外から pip install している。
  2. マーカーの存在: ディストリ側が標準ライブラリのフォルダに EXTERNALLY-MANAGED を置いており、pip がそれを検知している。
  3. sudo での全体導入: sudo pip install でシステム全体を書き換えようとしている。
  4. 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 black

3. どうしてもシステムに入れるとき

壊れても自分で直せる前提で、明示的に許可フラグを付ける。

pip install --break-system-packages SomePackage

OS が用意するパッケージがあるなら apt install python3-requests のように OS 側で入れるほうが安全。

この記事は役立ちましたか?