Python uv コアコンセプト:pyproject.toml・ロックファイル・仮想環境
4 min read
コマンドを闇雲に打つ前に、この 4 つのコンセプトを頭に入れてください:「依存関係はどこに書くか、ロックファイルは何のためにあるか、venv はいつ作られるか」が明確になります。ゲームをプレイする前にスキルの説明を読むようなもの — 読まないと意味もなく何度も死にます。
コンセプト 1:pyproject.toml はプロジェクトの身分証明書
プロジェクトのメタデータと依存関係はすべてここに書きます。PEP 518 の標準フォーマットです。
[project]
name = "my-app"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"requests>=2.31",
]- 手動編集:
pyproject.tomlを直接編集 - コマンドで変更:
uv add requestsとuv remove requestsが自動的に更新してくれる
混用しないこと — 手動かコマンドか、どちらかに統一。両方使うと衝突します。
コンセプト 2:uv.lock は依存関係のスナップショット
pyproject.toml は「何が欲しいか」を書きます(例:requests>=2.31)。uv.lock は「実際にインストールされたバージョン」を記録します — すべての推移的依存関係まで正確に。
- なぜロックファイルが必要か? すべての人・すべての CI・本番環境が完全に同じ依存関係ツリーをインストールすることを保証します。「私の環境では動く、あなたの環境では壊れる」はもうなし。
- コミットすべきか? はい。
uv.lockはバージョン管理に入れて、チームと CI が同じ依存関係ツリーを使えるようにしてください。
# ロックファイルを更新(例:パッケージをアップグレード)
uv lock --upgrade-package requestsコンセプト 3:.venv はプロジェクト専用のサンドボックス
uv はプロジェクトルートに .venv を作成します — uv add したすべてのパッケージはここに入り、システム Python から隔離されます。
- 手動で activate する必要があるか? いいえ。
uv runが自動的にこの環境を使います。 - コミットすべきか? いいえ。
.venvは.gitignoreに入れてください。
# 環境を手動同期(例:新しくクローンした後)
uv sync
source .venv/bin/activate # その後 python、pytest などを直接使えるコンセプト 4:uv run は楽ちんな実行エントリーポイント
uv run は:
- ロックファイルが pyproject.toml と整合しているか確認
- .venv がロックファイルと同期していることを確認
- 正しい環境で指定したコマンドを実行
uv run python main.py
uv run pytest
uv run flask run -p 3000activate を覚える必要も、環境の間違いを心配する必要もない — uv に任せるだけ。トイレの場所を考えなくても自然に向かう猫のように。この「開けば動く」体験は、一度使ったら戻れません。
次のステップ
コアコンセプトを消化したら、高頻度の操作へ:依存関係管理・uvx・スクリプト実行。 👉 よくあるパターン