uvって何?Pythonパッケージ管理の新しい選択肢について

uvというツールを耳にしたことはありますか?

2024年に登場したこのRust製のPythonのパッケージマネージャが、開発者の間で注目になっています。ようやく従来のpipvenvに慣れ親しんだというのに…🙄「新しいツールって本当に必要?」なんだろうかというちょっと嫌な見方をしてしまうのです。

詳細に関しては別の方が詳しいエントリーを作成されていると思うのでそちらに譲るとして、 今回はuvとはどんなものなのか、従来のツールとどう違うのか、そしてどんな場面で役立つのかを調べてみました。

参考

docs.astral.sh

zenn.dev

uvとは?

uvは、Astral社が開発したPython向けのパッケージ&プロジェクト管理ツールです。

主な特徴

  • Rust製で非常に高速
  • pip互換のコマンド体系
  • 仮想環境管理も可能

簡単に言えば、「pipvenvpyenvの機能を統合し、更に高速になったオールインワンツール」といえるのではないかと思います。

従来のツールとの比較

基本的なコマンド比較

操作 従来(venv + pip) uv(高速化版)
仮想環境作成 python3 -m venv .venv uv venv .venv
環境有効化 source .venv/bin/activate source .venv/bin/activate
パッケージインストール pip install requests uv pip install requests
requirements使用 pip install -r requirements.txt uv pip install -r requirements.txt
パッケージ一覧 pip freeze uv pip freeze

一見すると使い方はほとんど同じですが、内部的には大きな違いがあります。

機能面の違い

機能 pip + venv uv
処理速度 標準的 10-100倍高速
Python本体管理 pyenvなど別途必要 pyenv的機能内蔵(自動DL)
依存関係の固定 requirements.txt uv.lock(自動生成)
プロジェクト設定 複数ファイル pyproject.toml中心
互換性 Python標準 pip完全互換

uvの特徴

圧倒的な高速化

特に大量のパッケージやCI/CD環境で威力を発揮します。

統合された管理

# プロジェクト作成から実行まで一貫して管理
$ uv init my-project
$ cd my-project
$ uv add requests pandas  # 本番用依存
$ uv add --dev pytest     # 開発用依存
$ uv run python main.py   # 仮想環境を意識せず実行

確実な再現性

  • uv.lockファイルで依存関係を固定
  • チーム開発やCI/CDで「環境の差異」による影響を減少

Python本体からパッケージまで一元管理

# Python本体のインストール(pyenv的機能)
$ uv python install 3.11
$ uv python install 3.12

# プロジェクトごとに異なるPythonバージョンを指定
$ uv venv --python 3.11  # 3.11環境
$ uv venv --python 3.12  # 3.12環境

# プロジェクト内でpyenvのような切り替えも可能
$ uv python pin 3.11  # このプロジェクトは3.11を使用

uvを試してみる

インストール方法

# 公式インストーラ(推奨)
$ curl -LsSf https://astral.sh/uv/install.sh | sh

# パスを通す
$ export PATH="$HOME/.local/bin:$PATH"

# .bashrcにパスを通す処理を追加
$ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

簡単な動作確認

# バージョン確認
$ uv --version

# 新しいプロジェクトで試してみる
$ uv init test-project
$ cd test-project
$ uv add requests
$ uv run python -c "import requests; print('uvでrequestsが使えました!')"

# これまでの仮想環境を試してみる
$ mkdir pip-project
$ cd pip-project
$ uv venv
$ source .venv/bin/activate
$ uv pip install requests
$ python -c "import requests; print('uvでrequestsを導入しました!')"

uv pip installuv addの使い分けの方法

uvはモダンなアプローチと既存の高速化の2つのタイプのパッケージ管理ができます。 このあたりがちょっとわかりにくいです。

アプローチ 使用コマンド 管理ファイル 使用場面 記録方法
モダン方式 uv add pyproject.toml + uv.lock 新規プロジェクト 自動記録
従来方式 pip install + 手動管理 requirements.txt 既存プロジェクト、既存環境 手動記録
uv従来互換 uv pip install + 手動管理 requirements.txt 既存環境の高速化 手動記録
一時的 uv pip install なし 実験、検証、一時的な検証 記録なし

おわりに

uvpipの置き換えというより、Pythonパッケージ管理の新しい選択肢として考えるのがよさそうです。

新しいプロジェクトや効率化を求める場面では、uvを試してみる価値は十分にあります。一方で、現在のワークフローが問題なく動いているなら、無理に変更する必要もないこともあるでしょう。