Python uv 高度な実務:Python バージョン・pip インターフェース・ツールインストール

3 min read

要求が「動けばいい」から「マルチバージョンテスト・既存パイプラインとの互換性・全域ツール管理」に変わっても、uv は対応できます。この記事はソロダンジョンからチームレイドへのアップグレードです。

Python バージョン管理

uv は Python のダウンロードと管理が組み込まれています — pyenv を別途インストールする必要はありません。

# 複数バージョンをインストール
uv python install 3.10 3.11 3.12
 
# プロジェクトのバージョンを固定(.python-version を生成)
uv python pin 3.11
 
# 特定バージョンで venv を作成
uv venv --python 3.12
 
# 特定バージョンで実行
uv run --python 3.10 pytest

バージョンを初めて使う際は自動ダウンロード — 以降はキャッシュからすぐ使えます。

pip 互換インターフェース

既存の CI・Docker・スクリプトがまだ pip を使っている?uv がドロップイン置き換えを提供:

# pip install -r requirements.txt と同等
uv pip install -r requirements.txt
 
# requirements をコンパイル(クロスプラットフォーム・再現可能)
uv pip compile requirements.in --universal -o requirements.txt
 
# 環境を同期(ロックファイルに厳密に従う)
uv pip sync requirements.txt
 
# venv を作成
uv venv

uv pip に切り替えると、パラメータはほぼ同じで速度が一桁違います — 自転車からオートバイに乗り換えるようなもの:道は同じ、体験は全然違う。大きな変更を避けてレガシープロジェクトをアップグレードしたい?まず uv pip に変えるだけで痛みなく飛躍します。

全域ツールインストール(uv tool)

よく使うツールを毎回 uvx で実行したくない?全域インストールする:

uv tool install ruff
uv tool install httpie
 
# 以降は直接呼び出せる
ruff check .
http https://httpbin.org/get

単一ツールまたは全ツールをアップグレード:

uv tool upgrade ruff
uv tool upgrade --all

uv tool install は独立した環境を作成するので、プロジェクトの依存関係と衝突しません。プロジェクトでバージョン固定が必要なツールは、引き続き uv add --dev を使ってください。

スクリプトロックファイルと shebang

単一スクリプトも再現可能にしたい?依存関係をロックできます:

uv lock --script example.py

example.py.lock が生成されます。uv run example.py を実行するとこのロックファイルが使われます。

または実行ファイルにする:

#!/usr/bin/env -S uv run --script
# /// script
# dependencies = ["httpx"]
# ///
 
import httpx
print(httpx.get("https://example.com"))
chmod +x fetch
./fetch

次のステップ

高度な機能を習得したら、指針でリスクを抑えましょう: 👉 ベストプラクティス