
最終更新: 2026-04-28
pip install エラー解決:自動化スクリプトで詰まった私の記録
Python で自動化を組み始めてから半年、エラー画面を開くたびに「またか」と思いながら上から読もうとしていた。47行の赤文字——どこを読めばいいかすらわからない。Stack Overflow で似たエラーを探して、なんとなく試して、なんとなく直る。それが3回続いたところで、「このエラー、また来る気がする」と気づいた。
その予感は正しかった。
launchd + Python の自動化パイプラインを組む中で、pip 絡みのエラーに何度かやられている。この記事は、そのたびに詰まって解決した記録だ。エラーの種類、スタックトレースの読み方、仮想環境を切り直すことを覚えた経緯——実際に踏んだ順番で書く。
よくある pip エラーパターンと解決の型
私が自動化パイプラインで踏んだエラーを種類別に整理した。遭遇するエラーの8割はこの6パターンに収まる。
| エラー種別 | 典型的なメッセージ | 解決方向 |
|---|---|---|
| モジュール未インストール | 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 |
残りの2割はライブラリ固有の問題で、ライブラリ名 + GitHub issues で調べる方が早い。pip のドキュメントより issue tracker の方が実態に近いことが多い。
「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' だけ読めばいい。上の40行は「そこに至るまでの経路」で、今は気にしなくていい。解決策は pip install playwright。
ただし、依存関係の競合だけは話が違う。ERROR: ResolutionImpossible みたいなメッセージが中間に挟まっていたりする。そういうときは全体をコピーして Claude Sonnet 4.6 に投げるのが今の私のやり方だ。エラーの構造ごと説明してくれる。
実際に詰まったケース:Playwright + 仮想環境の地獄
note の自動投稿スクリプトを書いていたとき、3回連続で同じエラーが出た。
$ python3 note_poster.py
ModuleNotFoundError: No module named 'playwright'
pip install playwright を実行した。ターミナルに「Successfully installed」と出た。もう一度スクリプトを実行した。
$ python3 note_poster.py
ModuleNotFoundError: No module named 'playwright'
また同じ。「さっきインストールしたはずなのに」と思いながら15分くらい同じことを繰り返した。pip install --force-reinstall playwright も試した。直らない。
原因は 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 をしたせいで、古いバージョンに依存していたスクリプトが静かに死んでいた。launchd のエラーログを掘ったら ImportError が延々と積まれていた——気づくまでに半日かかった。「なぜか動かなくなった」ではなく「自分で壊した」という感覚。
それ以来、プロジェクトごとに venv を切るようにした。
cd ~/Documents/AI_Automation_Base
python3 -m venv .venv
source .venv/bin/activate
# activate できているか確認
which python3
# → /Users/taito/Documents/AI_Automation_Base/.venv/bin/python3
pip install playwright requests
launchd で自動起動するスクリプトには、plist にフルパスで書く。
<!-- 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 install pip-tools
# requirements.in に必要なものを列挙
echo "playwright" >> requirements.in
echo "requests" >> requirements.in
# バージョン解決してロックファイルを生成
pip-compile requirements.in
# ロックファイルからインストール
pip-sync requirements.txt
毎回やるかというとやらない。「このパイプラインは半年動かし続ける」と決めたときだけ導入している。
コピペで使えるデバッグコマンド集
詰まったときにまず叩くコマンドをまとめた。
# 今どの 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 を使えば sudo は不要になる。
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/pip.conf でデフォルトを設定しておくと毎回オプションを付けなくて済む。
まとめ
エラーを見て「ああ、このパターンか」と思えるようになるまで時間はかかった——でも、思えるようになる。
今の私がいつも守っていることは3つだけだ。python3 -m pip install を使う、プロジェクトごとに venv を切る、launchd の plist にはフルパスを書く。この3つで pip 絡みのエラーの9割は消えた。残りの1割は——その都度詰まって、その都度記録している。✨
この記事を読んだあなたに:
– launchd でPythonスクリプトを自動実行する設定方法 #
– Playwright 自動化の始め方:Brave CDP 接続で詰まらなくなった #
– Ollama ローカルLLMのセットアップと自動化パイプラインへの組み込み方 #