pip install が Permission denied で失敗する
システム Python のサイトパッケージは root 所有のため、ユーザ権限の pip install は書き込みに失敗する。
venv を作るのが正攻法で、--user オプションや pipx も選択肢。
sudo pip は環境破壊につながるため避ける。
#pip#permission#venv#pipx#python
要約
pip install が Permission denied または error: externally-managed-environment で失敗するのは、システム Python の site-packages に書こうとしているから。
仮想環境 (venv) を作って activate してから install するのが正攻法。sudo pip は OS の Python を壊すリスクがあるため使わない。
よくある原因
- システム Python に書き込もうとする:
/usr/lib/python3.x/site-packagesなどは root 所有で一般ユーザに書き込み権が無い - venv を作らず開発: プロジェクトごとに環境を切らず、global を直接汚そうとしている
- activate 忘れ:
.venvは作ってあるが、シェルを開き直して activate していない - PEP 668 のガード: Python 3.11 以降の Debian / Ubuntu 等では、システム環境への install は明示的に拒否される
解決策
1. venv を使う(推奨)
python3 -m venv .venv
source .venv/bin/activate # Windows は .venv\Scripts\activate
pip install -r requirements.txtpip 公式ユーザガイド でも、プロジェクト単位の venv が推奨。which pip で venv 内の pip を指しているか確認する。
2. CLI ツールには pipx
python3 -m pip install --user pipx
pipx install black
pipx install poetrypipx は各ツールごとに独立 venv を作って公開コマンドだけシンボリックリンクする。
グローバル環境を汚さず、pipx upgrade で個別更新できる。
3. --user オプション
pip install --user requests~/.local/lib/python3.x/site-packages に入る。
venv が使えない CI や、システム全体ではなく自分だけ使いたい場合に有効。
ただし複数プロジェクトの依存衝突は防げないので、開発用途には venv の方が無難。
4. sudo pip install は使わない
# NG: OS パッケージマネージャと喧嘩する
sudo pip install requestsPEP 668 で標準化された通り、ディストリ提供の Python は OS 側で管理されている。
ここに pip で上書きすると、apt で入れた他パッケージが壊れる。