
pip install エラー解決:自動化スクリプトで詰まった私の記録
Python で自動化スクリプトを書き始めた頃、エラー画面を開くたびに気が重くなっていた。47行の赤文字が並んでいても、どこを読めばいいのかすらわからない。「このエラー、前も見た気がする……」と毎回検索して、Stack Overflow を読んで、なんとなく試して、なんとなく直る。
そういう時期が確実にあった。
今は違う。エラーを見ると「ああ、このパターンか」と思うようになった。そこまで来るのに要したのは、失敗の積み重ねと、ある程度の型の習得だけだった。
この記事でわかること:
- よくある
pip installエラーのパターンと解決の型 - 仮想環境の使い方と「なぜ venv が必要か」の実感ベースの説明
- 赤文字47行から「本当のエラー」を5秒で見つける読み方
- 自動化スクリプトで実際に詰まったケースの実録
- コピペで使えるデバッグコマンド集
よくある pip エラーパターンと解決の型
まず全体像を頭に入れておく。私が自動化を組んでいる中で遭遇したエラーを種類別に整理した。
| エラー種別 | 典型的なメッセージ | 解決方向 |
|---|---|---|
| モジュール未インストール | ModuleNotFoundError: No module named 'xxx' |
pip install xxx |
| 依存関係の競合 | ERROR: pip's dependency resolver does not currently take into account all the packages |
pip install --upgrade or 仮想環境を切り直す |
| 権限エラー | Permission denied |
--user フラグ or sudo(後者は非推奨) |
| Python バージョン不一致 | python setup.py egg_info did not run successfully |
python3 -m pip で実行 |
| キャッシュ壊れ | 同じエラーが何度も出る | pip cache purge |
| SSL証明書 | SSLError: certificate verify failed |
--trusted-host or pip install certifi |
これだけ知っておけば、遭遇するエラーの8割はカバーできる。残りの2割は「そのライブラリ固有の問題」なのでライブラリ名 + GitHub issues で調べるのが早い。
「47行の赤文字」の読み方
最初にやらかしたのは、エラー文を全部読もうとしていたことだった。
Pythonのスタックトレースは基本的に「下から読む」。一番最後の行に実際のエラーメッセージが書いてある。
Traceback (most recent call last):
File "/Users/taito/scripts/note_poster.py", line 34, in <module>
from playwright.sync_api import sync_playwright
File "/usr/local/lib/python3.11/...", line 12, in ...
...(中略・たくさんの行)...
ModuleNotFoundError: No module named 'playwright'
この場合、最終行 ModuleNotFoundError: No module named 'playwright' だけ読めばいい。解決策は pip install playwright。上の40行は「そこに至るまでの経路」で、今は気にしなくていい。
ただし、依存関係の競合だけは話が違う。ERROR: ResolutionImpossible みたいなメッセージが中間に出ていたりする。そういうときは全体をコピーして、Claude Code に投げるのが今の私のやり方だ。
実際に詰まったケース:Playwright + 仮想環境の地獄
note の自動投稿スクリプトを書いていたとき、こういうことが起きた。
$ python3 note_poster.py
ModuleNotFoundError: No module named 'playwright'
pip install playwright を実行。成功した。もう一度実行。
$ python3 note_poster.py
ModuleNotFoundError: No module named 'playwright'
また同じエラー。「あれ、さっきインストールしたはずなのに」と15分くらい同じことを繰り返した。
原因は Python インタープリタの混在だった。pip install した先の Python と、スクリプトを実行した Python が違っていた。
# これを確認してなかった
which python3
# /usr/bin/python3 ← system の Python
which pip3
# /usr/local/bin/pip3 ← Homebrew の Python に紐付いた pip
解決は python3 -m pip install playwright に変えること。-m pip を使うと「今実行しているこの python にインストールする」という意味になる。
# コピペ可
python3 -m pip install playwright
python3 -m playwright install chromium
これで直った。朝7時に気づいたときの安堵感は今でも覚えている。
仮想環境を使うようになったきっかけ
最初は venv の存在を知っていても、使っていなかった。「面倒くさそう」という理由だけで。
転機はあるスクリプトが動かなくなった日だった。前日まで動いていた自動化パイプラインが、何かをインストールした後から壊れていた。調べると、別プロジェクトで pip install requests --upgrade をしたせいで、古いバージョンに依存していたスクリプトが死んでいた。
それ以来、プロジェクトごとに venv を切るようにした。
# コピペ可:venv 作成から起動まで
cd ~/Documents/AI_Automation_Base
python3 -m venv .venv
source .venv/bin/activate
# 確認
which python3
# → /Users/taito/Documents/AI_Automation_Base/.venv/bin/python3
pip install playwright requests
launchd で自動起動するスクリプトには、フルパスで書く。
<!-- launchd plist でのフルパス指定 -->
<key>ProgramArguments</key>
<array>
<string>/Users/taito/Documents/AI_Automation_Base/.venv/bin/python3</string>
<string>/Users/taito/Documents/AI_Automation_Base/01_Scripts/note_poster.py</string>
</array>
これをやっていないと、launchd から実行したとき「モジュールが見つからない」エラーが出続ける。launchd は当然 venv を自動で activate してくれない。
依存関係競合の実録と pip-tools 導入
Playwright と selenium を同じ環境に混在させたとき、こういうメッセージが出た。
ERROR: pip's dependency resolver does not currently take into account all the packages
that are installed. This behaviour is the source of the following dependency conflicts.
selenium 4.1.0 requires urllib3[socks]~=1.26, but you have urllib3 2.0.3 which is incompatible.
試した順:
pip install --upgrade urllib3→ selenium が壊れたpip install urllib3==1.26.18→ 今度は別のものが壊れた- 仮想環境を作り直して両方を入れ直す → 解決
「依存関係の競合は、仮想環境を切り直す方が早い」。これは今では当たり前のことだけど、最初は30分くらい格闘していた。
競合を事前に防ぐなら pip-tools が使える。requirements.in に必要なライブラリだけ書いておくと、互換性のとれたバージョンを計算してくれる。
# コピペ可:pip-tools でバージョンを固定する
pip install pip-tools
# requirements.in に必要なものを列挙
echo "playwright" >> requirements.in
echo "requests" >> requirements.in
# バージョン解決してロックファイルを生成
pip-compile requirements.in
# ロックファイルからインストール
pip-sync requirements.txt
毎回やるかというとやらない。でも「このパイプラインは半年動かし続ける」と思ったときは使う。
コピペで使えるデバッグコマンド集
詰まったときにまず叩くコマンドをまとめておく。
# コピペ可:pip デバッグ基本セット
# 今どの Python を使っているか確認
which python3 && python3 --version
# pip がどこにインストールするか確認
python3 -m pip show pip | grep Location
# インストール済みパッケージ一覧
python3 -m pip list
# 特定パッケージの情報
python3 -m pip show playwright
# キャッシュをクリア(謎のエラーが続くとき)
python3 -m pip cache purge
# 依存関係の競合チェック
python3 -m pip check
# 全パッケージをrequirements.txtに書き出す
python3 -m pip freeze > requirements.txt
# requirements.txt から一括インストール
python3 -m pip install -r requirements.txt
特に pip check は知らなかった期間が長い。既存の環境で競合が起きているかどうかを確認できる。
よくある質問
pip install したのに ModuleNotFoundError が出る
python3 -m pip install を使っているか確認する。単に pip install だと、実行している Python と異なるインタープリタにインストールされている可能性がある。venv を使っているなら source .venv/bin/activate で activate できているかも確認。
sudo pip install はだめなのか
やらない方がいい。システムの Python 環境を汚すことになる。--user フラグか、venv を使う。
pip install が途中でコネクションエラーになる
社内ネットワークやプロキシ環境で起きやすい。pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org xxx で試す。私は外出先のモバイル回線切り替えで直ったことがある。
仮想環境の activate を忘れる
launchd のスクリプト内ではフルパス指定にする。手動実行が多いなら .zshrc に auto-activate のフックを書く方法もある。私は忘れがちなので、各プロジェクトの Makefile に venv/bin/python3 で実行するターゲットを書いている。
pip install が非常に遅い
PyPI のミラーを国内サーバーに変えると速くなる場合がある。pip install -i https://pypi.org/simple/ xxx でそのまま使うか、~/.pip/pip.conf でデフォルトを変更する。
まとめ
- エラーの「赤文字47行」は下から読む。最終行が本当のエラーメッセージ
pip installではなくpython3 -m pip installを使う習慣が混乱を防ぐ- 依存関係の競合は「仮想環境を切り直す」方が格闘するより早い
- launchd から実行するスクリプトには Python のフルパスを書く
pip checkで既存環境の競合を事前に検出できる- 頻繁に壊れる環境には
pip-toolsでロックファイルを作る
エラーは怖くない。同じパターンが何度も出るだけだ。✨
この記事を読んだあなたに:
– launchd でPythonスクリプトを自動実行する設定方法 #
– Playwright 自動化の始め方:Brave CDP 接続で詰まらなくなった #
– Ollama ローカルLLMのセットアップと自動化パイプラインへの組み込み方 #