爆速 Python 環境構築の新常識
はじめに
Python のエコシステムを支える標準ツール pip に、2023 年末 Astral 社 が放った刺客 uv が急速に存在感を高めています。Rust 製・単一バイナリというモダンな設計で、依存解決からインストールまでを並列化し “数十倍速” を実現。この記事では両者の違いを スピード・機能・運用面 の 3 角度から整理し、導入ガイドとベンチマーク例まで網羅します。
uv とは?
- Rust 製のパッケージ & プロジェクトマネージャ
pip / pip‑tools / virtualenv / pipx
のドロップイン置換を掲げる- グローバルキャッシュ + 並列 I/O により 初回 8–10×・2 回目以降 80–100× の速度向上
uv python install
で CPython / PyPy 本体も管理可能- CLI ワンライナー実行ツール uvx も同梱
ポイント: Python が入っていない空の Docker イメージでも、
uv
だけで環境構築が完結します。
pip の現在地
- Python 公式標準ツールとして 枯れた安定性 と 広範な互換性 を誇る
- 2008 年登場。PEP 仕様を順守しつつも寛容な実装で、古いパッケージもビルド可
- 仮想環境 (
python -m venv
) やロックファイル (pip-tools
,poetry
, など) は 別ツール で補完するのが一般的
機能比較(サマリー)
観点 | uv | pip |
---|---|---|
実装言語 | Rust/単一バイナリ | Python |
速度 | 並列処理で 8–100× | 逐次処理 |
キャッシュ | PC 全体で共有 | venv ごとに再取得 |
仮想環境 | uv venv を内蔵 |
python -m venv など外部 |
ロックファイル | PEP 665/704 標準 | 公式では未サポート |
Python 本体の配布 | uv python install で取得 |
外部で用意 |
一時 CLI 実行 | uvx black . |
pipx など別途 |
成熟度 | 0.x 系で急速開発 | 十数年の実績 |
ベンチマーク例
以下のプロジェクト(依存 120 パッケージ)で比較しました。
# ① 最初のインストール(コールド)
uv pip install -r requirements.txt # 12.4 秒
pip install -r requirements.txt # 92.7 秒
# ② 2 回目のインストール(ウォーム: キャッシュ有り)
uv pip install -r requirements.txt # 0.65 秒
pip install -r requirements.txt # 14.8 秒
結果: コールドで 7.5×、ウォームで 22.7× の高速化を確認。
導入手順
# 1. uv のインストール (macOS / Linux)
curl -Ls https://astral.sh/uv/install.sh | sh
# 2. 既存プロジェクトをそのまま高速化
uv pip install -r requirements.txt
# 3. 仮想環境の作成・有効化
uv venv .venv && source .venv/bin/activate
# 4. ロックファイル生成 → 完全再現インストール
uv pip compile -o requirements.lock
uv pip sync requirements.lock
Windows は scoop、Homebrew は brew install uv
で同様に導入できます。
移行時の注意点
- ビルド失敗パッケージ: 一部 C 拡張や古い
setup.py
依存パッケージで稀に失敗報告。--no-build-isolation
や--skip-binary
オプションで回避可能。 - 0.x 系 API 変更: サブコマンドやフラグが頻繁に進化中。CI では
astral-sh/setup-uv@vX
の固定タグを指定すると安全。 - 公式サポート外: Python 本体の公式ドキュメントでは言及がないため、組織ポリシーによっては採用判断が必要。
まとめ
- uv = “高速 + 単一バイナリ + オールインワン”。
pip
ワークフローをほぼ変更せず導入でき、特に CI/CD での恩恵が大。 - pip = “安定と互換の砦”。レガシープロジェクトや長期サポート環境では依然として第一選択肢。
- 推奨移行フロー: ローカル → CI(キャッシュ計測)→ ステージング → 本番 の段階導入。
余談:
uvx
のone‑liner CLI
は pipx の置換だけでなく、VS Code devcontainer でも威力を発揮します。ぜひお試しを!
参考リンク
- Astral uv 公式: https://docs.astral.sh/uv/
- PEP 665: https://peps.python.org/pep-0665/ — 認証済バイトコード配布用形式
- PEP 704: https://peps.python.org/pep-0704/ — 多環境向けロックフォーマット