uv

【Python】uvとは?pipとの違いと基本的な使い方を解説

【Python】uvとは?pipとの違いと基本的な使い方を解説
naoki-hn

Python で近年注目されている uv というパッケージおよびプロジェクト管理ツールについて解説します。

uv の概要

uv とは?

uv は、Python 用の高速なパッケージおよびプロジェクト管理ツールです。

従来の Python 環境の構築では、pip、venv など複数のツールを組み合わせて使用することが一般的でした。uv は、これらの機能を統合して、パッケージ管理、仮想環境管理、依存性管理などを 1 つのツールで扱えるようにしたものであり、pip の代替として非常に注目されているツールです。

また、uv は、プログラミング言語の Rust で実装されていることも特徴です。Rust の高速な処理能力を活かすことで、依存関係の解決やパッケージインストールを効率的に行うことができます。

この記事では、uv のインストール方法や使い方、pip との違いなどについて紹介していきます。

pip との比較

主な違い

pip は、Python の標準パッケージインストーラであり、PyPI (Python Package Index) からパッケージをインストールするためのツールです。一方、uv は、パッケージ管理だけでなく、仮想環境管理や依存関係の lock 管理なども統合して提供します。

比較項目pipuv
パッケージ管理
仮想環境作成×(venv などの別ツール)〇(内蔵)
lock ファイル×(標準でなし)〇(標準搭載)
実装言語PythonRust

lock ファイルに関する補足】

pip 自体には、lock ファイルの仕組みは標準では提供されていません。再現性を確保するためには「pip freeze」などを利用して requirements.txt を生成することが一般的です。

一方 uv では、lock ファイル(uv.lock)が標準機能として提供されており、依存関係固定と再現性確保が容易になっています。

速度の違い

uv は、Rust で開発されており、並列ダウンロードや効率的な I/O 処理により非常に高速に処理ができます。以下は、uv の公式サイトで紹介されている指標です。

uv 公式サイト 速度比較
uv 公式サイト より引用
(記事執筆時点のため記載は変更されている可能性があります)

このベンチマークでは、Python の非同期ライブラリ Trio の依存パッケージをインストールする際の速度が比較されています。Trio は、async / await を利用した非同期処理を扱う Python ライブラリで、このライブラリの依存関係をインストールする処理を各ツールで比較しています。

また、この測定は、warm cache (依存関係が既にキャッシュされている状態) で行われています。結果を見ると、poetry や pdm などの他ツールに比べて uv は非常に高速に処理できることが分かります。

uv のインストール方法

uv のインストール方法

uv のインストール方法を紹介します。手順は、公式のこちらを参照しています。

Windows でのインストール

Windows では、PowerShell を利用して以下のコマンドを実行します。

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

実際のインストールは「"irm https://astral.sh/uv/install.ps1 | iex"」の部分で実行されています。irm は、指定URLからデータを取得する PowerShell のコマンドで、インストールスクリプトをダウンロードし、iex に渡して実行しています。

powershell -ExecutionPolicy ByPass」は、この起動した PowerShell プロセスだけ実行ポリシーを無視してスクリプトを実行するための指定です。

インストールが完了すると「uv.exe」などの実行ファイルがインストールされます。PATH も自動的に設定されるため、PowerShell を再起動すると uv コマンドが使用できるようになります。

Linux/ macOS

Linux や macOS では、以下のコマンドを実行します。

curl -LsSf https://astral.sh/uv/install.sh | sh

uv によるプロジェクトの作成と管理

uv によるプロジェクトの作成

uv では、「uv init」コマンドを使用して新しいプロジェクトを作成できます。以下は、my-project というプロジェクトを作成する例です。

uv init my-project

このコマンドを実行すると、my-project というフォルダに以下のようなファイルが自動で生成されます。

my-project
├ .gitignore
├ .python-version
├ main.py
├ pyproject.toml
└ README.md

簡単に各ファイルの説明をしておきます。

pyproject.toml

Python プロジェクトの設定ファイルです。プロジェクト情報を管理するために使用され、近年の Python プロジェクトでは、pyproject.toml が標準的な設定ファイルとして利用されています。

main.py

エントリーポイントとして利用できるサンプルの Python ファイルです。

README.md

プロジェクトの概要や使い方などを記述するためのファイルです。

.gitignore

Git の管理から除外するファイルを指定する設定ファイルです。Python プロジェクトでは、仮想環境、キャッシュファイル、一時生成ファイルなどは Git 管理対象外として除外することが一般的です。

.python-version

使用する Python バージョンを指定するファイルです。プロジェクト単位で使用する Python バージョンを明示できます。仮想環境作成時に uv は、このファイルを参照しており、開発環境ごとの Python バージョン差異を防ぐことができるようになります。

パッケージの管理方法

パッケージ管理は、uv コマンドを使用して実行します。作成したプロジェクトの配下で以下で紹介するようなコマンドを使用します。

パッケージの追加

パッケージの追加は「uv add」コマンドで行います。以下は、NumPy の追加例です。

uv add numpy

複数のパッケージをまとめてインストールする場合は、スペースでパッケージを列挙すればまとめてインストールできます。

仮想環境や lock ファイルがない場合は生成され、lock ファイルには、依存パッケージの具体的なバージョン情報が記録され、プロジェクトの依存関係を再現できます。

パッケージの削除

パッケージを削除する場合は「uv remove」コマンドを次のようにします。

uv remove numpy

uv adduv remove で操作されたパッケージの依存関係は自動的に解決され、uv.lock が更新されます。

依存関係の表示(uv tree

インストールしたパッケージの依存関係ツリーを表示したい場合には「uv tree」コマンドを使用します。

uv tree

例えば、NumPy、pandas、scikit-learn をインストールした状態だと以下のような依存性のツリーを確認できます。

my-project v0.1.0
├── numpy v2.4.2
├── pandas v3.0.1
│   ├── numpy v2.4.2
│   ├── python-dateutil v2.9.0.post0
│   │   └── six v1.17.0
│   └── tzdata v2025.3
└── scikit-learn v1.8.0
    ├── joblib v1.5.3
    ├── numpy v2.4.2
    ├── scipy v1.17.1
    │   └── numpy v2.4.2
    └── threadpoolctl v3.6.0

uv run によるプログラム実行

uv では、「uv run」コマンドを使用して以下のようにプログラムを実行できます。

uv run main.py

通常 Python 開発環境を利用する場合には、以下のような手順を踏む必要があります。

  1. 仮想環境(venv)を作成
  2. 仮想環境を activate
  3. Python プログラムを実行

一方で、uv run を用いると、仮想環境が自動的に管理されるため、activate を意識せずにプログラムの実行ができます。

仮想環境(.venv)や uv.lock の生成タイミング

uv init でプロジェクトを生成したタイミングでは、仮想環境(.venv)や uv.lock ファイルは、生成されません。

これらは上記で紹介したような「uv run」「uv add」などのプロジェクトコマンドが最初に実行されたタイミングで生成されます。

仮想環境の自動管理

uv では、仮想環境が自動的に管理されるため、明示的な venv の作成や activate を意識する必要がありません。プロジェクト単位で Python 環境が管理されるため、複数のプロジェクトを扱う場合でも環境の衝突を防ぐことができます。また、プロジェクトごとに Python のバージョン指定をすることも可能です。

uv 使用に関する注意点

uv は、新しい Python プロジェクトでは非常に有力な選択肢となります。一方で、pip を中心としたプロジェクト管理と比較すると歴史はまだ浅いです。

既存の大規模プロジェクトへ導入する場合は、CI / CD 環境との整合性やチーム運用方針を確認しながら、段階的に導入を検討すると良いでしょう。新規のプロジェクトでは、ぜひ uv の採用を検討してみてください。

【参考】Rust の Cargo との類似性

Rust での開発を経験したことがある場合、uv の設計は Cargo と似ていると感じるかもしれません。

Cargo は、Rust 公式パッケージマネージャ兼ビルドツールであり、依存関係管理やビルドなどを 1 つのツールで扱うことができます。

uv も同様に、プロジェクト管理・依存関係管理・実行などを統合して提供しており、設計思想に共通点があります。

まとめ

Python で近年注目されている uv というパッケージおよびプロジェクト管理ツールについて解説しました。

uv は、Rust 製の高速な Python パッケージ・プロジェクト管理ツールです。pip での環境構築では複数ツールを組み合わせて行っていた「パッケージ管理」「仮想環境管理」「依存関係管理」を統合的に提供します。

uv は、pip に比べると歴史が浅いため、大規模プロジェクトでの採用には、段階的導入を検討するなど注意が必要ですが、新規プロジェクトでは、シンプルで再現性の高い開発環境を構築できるツールとして有力な選択肢となるでしょう。

あわせて読みたい
【Python Tech】プログラミングガイド
【Python Tech】プログラミングガイド
ABOUT ME
ホッシー
ホッシー
システムエンジニア
はじめまして。当サイトをご覧いただきありがとうございます。 私は製造業のメーカーで、DX推進や業務システムの設計・開発・導入を担当しているシステムエンジニアです。これまでに転職も経験しており、以前は大手電機メーカーでシステム開発に携わっていました。

プログラミング言語はこれまでC、C++、JAVA等を扱ってきましたが、最近では特に機械学習等の分析でも注目されているPythonについてとても興味をもって取り組んでいます。これまでの経験をもとに、Pythonに興味を持つ方のお役に立てるような情報を発信していきたいと思います。どうぞよろしくお願いいたします。

※キャラクターデザイン:ゼイルン様
記事URLをコピーしました