【入門編】「No Module Named …」の最終回答:uvツールチェインにおけるPATH優先順位とshimsの挙動を深く理解するデバッグ作法 – ビルド・パッケージ管理ツール生産性向上バイブル

エンジニア諸君、ようこそ。開発環境の迷宮へ。

Pythonのプロジェクトを始めたばかりの君が、「No module named …」という呪文に絶望し、結局「とりあえず`sudo pip install`して環境を破壊する」という最悪のルートを辿るのを、私は何度も見てきた。

だが安心してほしい。今日、君は「パッケージ管理の最終兵器」を手に入れることになる。それは `uv` だ。

単なる「爆速なパッケージマネージャ」という認識は捨ててくれ。`uv` は、Pythonの歴史が抱えてきた「環境汚染」という病に対する、アーキテクチャレベルの劇薬だ。これをマスターすれば、君は一生、依存関係の地獄に悩まされることはない。

—

1. なぜ「No Module Named」は起きるのか?(病理の理解)

このエラーの本質は、「君が実行しているPython」と「君がライブラリを入れた場所」が、物理的に別の世界線に存在していることにある。

PCの中には、OS標準のPython、`pyenv`で入れたPython、`brew`で入れたPythonが同居している。これらに`PATH`という名の「優先順位リスト」が適用されるわけだが、ここがカオスだと、君はAというPythonにライブラリを入れ、BというPythonでスクリプトを実行する。当然、Bは「そんなモジュール知らん」と喚く。

2. uvの真価:shimsによる「絶対支配」

`uv` は単なる管理ツールではない。Pythonの実行環境そのものを「仮想的な箱」の中に閉じ込め、shims(シム)という仲介役を立てることで、PATHの混乱を強制的に収束させる。

君が `uv run` を叩くとき、`uv` は以下の処理を瞬時に行っている。
1. プロジェクトの `.python-version` を読み込む。
2. 必要なPythonインタプリタがなければ、即座に(そして安全に)隔離された場所にダウンロードする。
3. その環境にのみ有効な `PATH` を動的に生成し、プログラムを実行する。

これによって、グローバルな環境を一切汚さずに、プロジェクトごとに「完璧に独立した宇宙」を作れるんだ。

—

3. 実践:環境を汚染しないための「最初のセットアップ」

まずは、`uv` をインストールしよう。システムに影響を与えないよう、以下のコマンドでインストールする。

uvの公式インストーラーを実行(システム環境を汚さないホームディレクトリ管理)
curl -LsSf https://astral.sh/uv/install.sh | sh

シェル設定を読み込み直す(これでuvコマンドが使えるようになる)
source $HOME/.cargo/env

プロジェクトの初期化(ここが一番重要)

プロジェクト用のディレクトリを作り、`uv` にすべてを委任する。

mkdir my-awesome-project
cd my-awesome-project

Python 3.12をプロジェクト専用としてインストールし、環境を生成
uv python install 3.12
uv init

この瞬間、君のディレクトリには `pyproject.toml` と `.venv` というディレクトリが生成される。この `.venv` こそが、君のプロジェクトを守る「結界」だ。

—

4. 「No Module Named」を二度と見ないための運用作法

今後は、ライブラリのインストールも、スクリプトの実行も、すべて `uv` を経由する。これが黄金律だ。

ライブラリの追加

単にインストールするだけではない
pyproject.tomlに依存関係を記録し、ロックファイル(.lock)を更新して整合性を保証する
uv add requests

スクリプトの実行(魔法のコマンド)

仮想環境をアクティベートする作業は不要
uv run を使うだけで、自動的に適切な環境がフックされる
uv run main.py

もし、VSCodeを使っているなら、「コマンドパレット(Ctrl+Shift+P) > Python: Select Interpreter」を開き、`./.venv/bin/python` を選択してくれ。これでエディタ側も、君のプロジェクトと同じ宇宙を見ることができるようになる。

—

5. デバッグ:もし迷子になったら

それでもエラーが出るなら、以下のコマンドで「今、どのPythonが、どこを見ているのか」を覗き込め。

実行中のPythonが参照しているパスを確認する
uv run python -m site

ここに出力される `sys.path` のリストが、君の正解だ。もしここに君の入れたいライブラリが含まれていないなら、それはその環境に対して `uv add` を忘れているだけだ。

—

最後に:賢いエンジニアのたしなみ

君が今日学んだのは、単なるツールの使い方じゃない。「自分の実行環境を完全に制御下に置く」というプロフェッショナルの作法だ。

環境構築で悩む時間は、君の貴重な人生の浪費だ。`uv` を使えば、その時間は「コードを書くこと」や「アーキテクチャを考えること」という、もっと生産的で楽しい体験に変換される。

さあ、PATHの迷宮から抜け出し、本来のコーディングを楽しんでくれ。困ったときは、いつでもこの知見に戻ってきてほしい。応援しているよ。

タイトルとURLをコピーしました