Pythonの新しいパッケージ管理ツール「uv」の完全ガイドです。従来のpipやpoetryと比べて10~100倍高速なRust製ツールで、仮想環境作成・パッケージ管理・Pythonバージョン管理を一元化できます。uv runでの効率的なスクリプト実行、uvxでの一時的CLIツール実行、既存プロジェクトからの移行方法まで実践的な使い方を網羅。開発環境構築の煩雑さや依存関係管理の課題を解決し、初心者から上級者まで生産性向上を実現できる情報が得られます。
目次
uvとは何か
uvの概要と特徴
uvは、Pythonのパッケージ管理とプロジェクト管理を統合的に行う次世代のツールです。Astral社によって開発されたこのツールは、従来のpip、virtualenv、pyenv、poetryなどの機能を一つにまとめ、より効率的なPython開発環境を提供します。
uvの最大の特徴は、その包括性にあります。パッケージのインストールから仮想環境の管理、Pythonバージョンの切り替え、プロジェクトの依存関係管理まで、Python開発に必要な機能をワンストップで提供します。また、設定ファイルはPEP 621標準に準拠したpyproject.tomlを使用し、業界標準に沿った開発が可能です。
さらに、uvは開発者の生産性向上を重視した設計となっており、複雑な設定を必要とせずに直感的な操作でプロジェクト管理が行えます。これにより、Python開発者は環境構築に時間を取られることなく、本来の開発作業に集中できるようになります。
従来のパッケージ管理ツールとの違い
uvと従来のPythonパッケージ管理ツールの最も大きな違いは、統合性です。従来の開発環境では、pip(パッケージインストール)、virtualenv(仮想環境)、pyenv(Pythonバージョン管理)、poetry(プロジェクト管理)など、複数のツールを組み合わせて使用する必要がありました。
一方、uvは以下の機能を単一のツールで提供します:
- パッケージのインストールと管理(pip相当)
- 仮想環境の作成と管理(virtualenv相当)
- Pythonバージョンの管理(pyenv相当)
- プロジェクト全体の依存関係管理(poetry相当)
- スクリプトの実行環境管理
この統合アプローチにより、ツール間の設定の不整合や互換性問題が解決され、より安定した開発環境を構築できます。また、学習コストも大幅に削減され、新しい開発者でも短時間でPython環境をマスターできるようになります。
Rust製による圧倒的な高速性
uvの技術的な優位性の核心は、Rust言語で実装されていることです。RustはシステムプログラミングにおいてC++に匹敵する性能を持ちながら、メモリ安全性を保証する現代的なプログラミング言語として注目されています。
この技術選択により、uvは従来のPythonベースのパッケージ管理ツールと比較して劇的な性能向上を実現しています。具体的には、以下の領域で顕著な高速化が見られます:
- 依存関係解決:複雑な依存関係グラフの解析が高速化
- パッケージダウンロード:並列処理による効率的なファイル取得
- インストール処理:最適化されたファイル操作による短縮されたセットアップ時間
- 仮想環境作成:軽量で高速な環境初期化
特に大規模なプロジェクトや多数の依存関係を持つアプリケーションでは、従来ツールと比較して10倍から100倍の性能向上が報告されています。この高速性により、CI/CDパイプラインの実行時間短縮や、開発者の待ち時間削減といった実用的なメリットがもたらされます。
uvのインストール方法
Pythonのモダンなパッケージマネージャーであるuvを使い始めるためには、まず適切なインストール手順を実行する必要があります。uvは各オペレーティングシステムに対応しており、公式が推奨する方法でインストールすることで、最新機能を安全に利用できます。ここでは、主要なOS別のインストール手順と、正しく動作することを確認する方法を詳しく説明します。
macOS・Linuxでのインストール手順
macOS・Linuxユーザーの場合、最も簡単で推奨される方法は公式のインストールスクリプトを使用することです。この方法では、最新版のuvが自動的にダウンロードされ、適切なディレクトリに配置されます。
まず、以下のコマンドをターミナルで実行してuvをインストールします:
curl -LsSf https://astral.sh/uv/install.sh | sh
インストールスクリプトが完了すると、uvは通常~/.local/bin
にインストールされます。Homebrewを利用している場合は、以下のコマンドでもインストール可能です:
brew install uv
また、Pythonのpipを使ったインストールも可能ですが、公式はスタンドアロンインストールを推奨しています:
pip install uv
インストール後は、シェルを再起動するか、以下のコマンドでPATHを更新してください:
source ~/.bashrc # または ~/.zshrc
Windowsでのインストール手順
Windows環境でuvをインストールする方法は複数ありますが、最も信頼性が高いのは公式のPowerShellスクリプトを使用する方法です。管理者権限は必要ありませんが、実行ポリシーの設定が必要な場合があります。
PowerShellを開き、以下のコマンドを実行してください:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Windows Package Manager(winget)が利用可能な環境では、以下のコマンドでもインストールできます:
winget install --id=astral-sh.uv -e
Chocolateyを使用している場合は、以下の方法も選択肢として利用可能です:
choco install uv
注意点として、Windows環境では環境変数PATHへの追加が自動で行われない場合があります。インストール完了後に新しいPowerShellまたはコマンドプロンプトを開いて動作を確認してください。
インストール後の動作確認
uvのインストールが正常に完了したかを確認するために、いくつかの基本コマンドを実行します。これらのコマンドにより、インストールされたバージョンや利用可能な機能を把握できます。
まず、uvが正しくインストールされ、システムから認識されているかを確認します:
uv --version
このコマンドでバージョン情報が表示されれば、基本的なインストールは成功しています。続いて、利用可能なコマンドオプションを確認しましょう:
uv --help
より詳細な動作確認として、uvが管理するPythonバージョンの一覧を表示できます:
uv python list
システムに既存のPython環境がある場合、uvはそれらを認識して表示します。新規プロジェクトの作成テストも有効な確認方法です:
mkdir test-uv-project
cd test-uv-project
uv init
これらのコマンドがエラーなく実行できれば、uvは正常にインストールされており、Python開発での活用準備が整っています。トラブルが発生した場合は、インストールログを確認し、必要に応じてPATH環境変数の設定を見直してください。
プロジェクトの初期化と基本設定
Python uvを使用したプロジェクト開発を開始するためには、適切な初期設定が重要です。uvは従来のツールと比較して設定が簡素化されており、迅速なプロジェクト立ち上げを可能にします。ここでは新規プロジェクトの作成から既存プロジェクトへの導入まで、uvによるプロジェクト初期化の基本的な流れを詳しく解説します。
新規プロジェクトの作成
Python uvで新規プロジェクトを作成する際は、uv init
コマンドを使用します。このコマンドは必要なファイル構造を自動的に生成し、開発環境を即座に利用可能な状態にセットアップします。
基本的な新規プロジェクトの作成手順は以下の通りです:
# 新しいディレクトリを作成してプロジェクトを初期化
uv init my-project
cd my-project
# 既存のディレクトリでプロジェクトを初期化
mkdir existing-project
cd existing-project
uv init
uv init
コマンドを実行すると、以下のファイルとディレクトリが自動生成されます:
pyproject.toml
– プロジェクト設定とメタデータを管理するファイルREADME.md
– プロジェクトの説明を記載するマークダウンファイルsrc/
ディレクトリ – Pythonソースコードを配置する標準的な構造.python-version
– 使用するPythonバージョンを指定するファイル
uvは初期化時に最新の安定版Pythonバージョンを自動的に設定し、即座に開発を開始できる環境を提供します。
プロジェクト設定ファイルの理解
Python uvで生成されるpyproject.toml
ファイルは、プロジェクトの中核となる設定ファイルです。このファイルにはプロジェクトのメタデータ、依存関係、ビルド設定などが記載されます。
標準的なpyproject.toml
ファイルの構造は以下のようになります:
[project]
name = "my-project"
version = "0.1.0"
description = ""
readme = "README.md"
dependencies = []
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.uv]
dev-dependencies = [
"pytest>=7.0.0",
"black>=22.0.0",
]
各セクションの役割と設定項目について詳しく解説します:
- [project]セクション – プロジェクト名、バージョン、説明、本番依存関係を定義
- [build-system]セクション – パッケージのビルドシステムとバックエンドを指定
- [tool.uv]セクション – uv固有の設定と開発用依存関係を管理
pyproject.tomlファイルは標準化されたPythonプロジェクト設定形式であり、uvは完全にこの標準に準拠しています。これにより他のツールとの互換性も保たれ、プロジェクトの可搬性が向上します。
既存プロジェクトへのuv導入
既存のPythonプロジェクトにuvを導入する場合、段階的な移行アプローチが推奨されます。uvは既存の設定ファイルを認識し、可能な限りスムーズな移行をサポートします。
既存プロジェクトへのuv導入手順:
- 既存環境の確認 – 現在の依存関係とPythonバージョンを把握
- uvの初期化 –
uv init --no-readme
で既存ファイルを保護しながら初期化 - 依存関係の移行 – requirements.txtやPoetryの設定からuvへ変換
- 設定の調整 – プロジェクト固有の要件に合わせてpyproject.tomlを調整
requirements.txtファイルが存在する場合の移行例:
# requirements.txtから依存関係を自動インポート
uv add $(cat requirements.txt)
# 開発用依存関係がある場合
uv add --dev $(cat requirements-dev.txt)
Poetryプロジェクトからの移行の場合:
# pyproject.tomlが既に存在する場合
uv sync
# Poetry固有の設定を維持しながらuvを併用
uv add --dev pytest black mypy
既存プロジェクトへの導入時は、必ず事前にバックアップを作成し、段階的に移行を進めることを強く推奨します。特に本番環境で稼働中のプロジェクトの場合は、開発環境で十分なテストを行ってから本格導入を検討してください。
Pythonバージョン管理
uvはパッケージ管理だけでなく、Pythonバージョン管理機能も統合しており、プロジェクトごとに異なるPythonバージョンを効率的に管理できます。従来のpyenvのような専用ツールを別途インストールする必要がなく、uv一つでPythonの環境管理を完結できる点が大きな魅力です。
Pythonバージョンのインストール
uvを使ってPythonバージョンをインストールする方法は非常にシンプルです。特定のPythonバージョンが必要な場合、以下のコマンドで簡単にインストールできます。
# 最新のPython 3.12系をインストール
uv python install 3.12
# 特定のマイナーバージョンをインストール
uv python install 3.11.5
# 複数のバージョンを同時にインストール
uv python install 3.10 3.11 3.12
インストール処理はRustによる高速化の恩恵を受けており、従来のツールと比較して大幅に短縮された時間でPythonバージョンのダウンロードとセットアップが完了します。また、インストール済みのPythonバージョンは自動的にuvの管理下に置かれ、プロジェクトでの利用が即座に可能になります。
プロジェクト別バージョン設定
uvの強力な機能の一つが、プロジェクトごとに異なるPythonバージョンを指定できることです。これにより、レガシーコードの保守とモダンな開発を並行して進められます。
# プロジェクトでPython 3.11を使用するよう設定
uv python pin 3.11
# より具体的なバージョンを指定
uv python pin 3.11.5
この設定により、プロジェクトルートに.python-version
ファイルが作成され、そのプロジェクト内でuvコマンドを実行する際は自動的に指定されたPythonバージョンが使用されます。チーム開発において、開発者間でのPythonバージョンの違いによる問題を効果的に防げるため、開発環境の統一と品質向上に大きく貢献します。
さらに、pyproject.tomlファイル内でもPythonバージョンの要件を定義できます:
[project]
requires-python = ">=3.11"
利用可能なPythonバージョンの確認
uvでは、インストール済みのPythonバージョンや利用可能なバージョンを簡単に確認できるコマンドが提供されています。環境管理において、現在の状況を把握することは重要な作業です。
# インストール済みPythonバージョンの一覧表示
uv python list
# インストール可能な全てのPythonバージョンを表示
uv python list --all-versions
# 現在アクティブなPythonバージョンの確認
uv python list --only-installed
出力結果では、各Pythonバージョンの詳細情報とともに、どのバージョンがアクティブに使用されているかが分かりやすく表示されます。また、特定のプロジェクトで使用されているPythonバージョンと、そのバージョンがどこからインストールされたものかも確認できるため、環境のトレーサビリティが向上します。
これらの機能により、uvは単なるパッケージ管理ツールを超えて、Python開発における包括的な環境管理ソリューションとしての地位を確立しています。プロジェクトの規模や複雑さに関わらず、一貫した方法でPythonバージョンを管理できる点は、開発効率の大幅な向上をもたらします。
仮想環境の作成と管理
uvを使用した仮想環境の管理は、従来のvenvやcondaと比べて圧倒的に高速で直感的な操作が可能です。Rust製のuvは仮想環境の作成から削除まで、すべての工程を効率化し、Python開発者の生産性を大幅に向上させます。
仮想環境の作成方法
uvでの仮想環境作成は、シンプルなコマンド一つで実行できます。基本的な仮想環境の作成にはuv venv
コマンドを使用します。
uv venv myproject
このコマンドを実行すると、現在のディレクトリに「myproject」という名前の仮想環境が作成されます。環境名を指定しない場合は、デフォルトで「.venv」という名前で仮想環境が作成されます。
uv venv
作成された仮想環境は、プロジェクトの依存関係を分離し、システム全体のPython環境に影響を与えることなく開発を進められます。uvの高速性により、従来のvenvと比較して数倍から数十倍の速度で仮想環境が構築されます。
仮想環境のアクティベーション
作成した仮想環境を使用するためには、アクティベーション(有効化)が必要です。uvで作成した仮想環境は、従来のPython仮想環境と同様の方法でアクティベートできます。
macOSやLinuxの場合:
source .venv/bin/activate
Windowsの場合:
.venv\Scripts\activate
アクティベーション後は、プロンプトに環境名が表示され、その環境内でのパッケージ操作が可能になります。また、uvはuv runコマンドを使用することで、明示的なアクティベーションなしに仮想環境内でコマンドを実行する機能も提供しており、より効率的な開発ワークフローを実現できます。
仮想環境を非アクティブ化するには、以下のコマンドを実行します:
deactivate
特定Pythonバージョンでの環境作成
uvは特定のPythonバージョンを指定した仮想環境の作成を簡単に行えます。--python
オプションを使用することで、プロジェクトの要件に応じた適切なPythonバージョンで環境を構築できます。
uv venv --python 3.11 myproject-py311
uv venv --python 3.10 myproject-py310
指定したPythonバージョンがシステムにインストールされていない場合、uvは自動的に該当バージョンをダウンロードしてインストールします。この機能により、複数のPythonバージョンを管理する煩雑な作業が不要になります。
また、より具体的なバージョン指定も可能です:
uv venv --python 3.11.5 precise-version-env
uv venv --python python3.9 legacy-project
さらに、プロジェクトディレクトリ内でuv init
と組み合わせることで、プロジェクトの初期化と同時に特定バージョンでの仮想環境作成も実行できます。これにより、一貫した開発環境の構築が保証され、チーム開発での環境の差異によるトラブルを防げます。
パッケージの管理手法
Python uvでは、プロジェクトで使用するパッケージを効率的に管理するための強力な機能が提供されています。従来のpipやpoetryと比較して、uvは高速性と使いやすさを両立したパッケージ管理システムを実現しており、依存関係の解決からパッケージの同期まで、開発者の生産性を大幅に向上させます。
パッケージのインストールと削除
uvにおけるパッケージのインストールは、uv add
コマンドを使用して行います。このコマンドは、指定されたパッケージをプロジェクトに追加し、自動的にpyproject.toml
ファイルに依存関係を記録します。
# 基本的なパッケージのインストール
uv add requests
# 開発用パッケージのインストール
uv add pytest --dev
# 特定のバージョンを指定したインストール
uv add "django>=4.2,5.0"
# 複数パッケージの同時インストール
uv add requests numpy pandas
パッケージの削除にはuv remove
コマンドを使用します。削除時には依存関係も適切に解決され、不要になったパッケージは自動的に取り除かれます。
# パッケージの削除
uv remove requests
# 開発用パッケージの削除
uv remove pytest --dev
# 複数パッケージの同時削除
uv remove numpy pandas
uvでは、パッケージの追加・削除時に自動的に仮想環境が作成・管理されるため、手動での環境管理が不要になります。これにより、開発者はパッケージ管理に集中でき、環境の競合問題を回避できます。
依存関係の同期とロック
uvの最も重要な機能の一つが、依存関係の同期とロックメカニズムです。uv sync
コマンドは、pyproject.toml
に定義された依存関係を基に、プロジェクト環境を正確な状態に同期させます。
# 依存関係の同期実行
uv sync
# 開発用依存関係も含めた同期
uv sync --dev
# 特定のグループのみ同期
uv sync --group test
uvは依存関係の解決時にuv.lock
ファイルを生成します。このロックファイルには、プロジェクトで使用されるすべてのパッケージの正確なバージョンとハッシュ値が記録されており、チーム開発における環境の一貫性を保証します。
- 決定論的な依存関係解決:同じロックファイルを使用することで、どの環境でも同じパッケージバージョンがインストールされます
- セキュリティの向上:パッケージのハッシュ値検証により、改ざんされたパッケージの検出が可能です
- 高速な環境構築:ロックファイルを使用することで、依存関係の再解決が不要になり、インストール時間が大幅に短縮されます
ロックファイルの更新が必要な場合は、uv lock
コマンドを使用します:
# ロックファイルの更新
uv lock
# 特定のパッケージのみ更新
uv lock --upgrade-package requests
パッケージツリーの表示と確認
プロジェクトで使用されているパッケージの依存関係を視覚的に確認することは、パッケージ管理において重要な作業です。uvでは、uv tree
コマンドを使用してパッケージの依存関係をツリー形式で表示できます。
# パッケージツリーの表示
uv tree
# より詳細な情報を含むツリー表示
uv tree --verbose
# 特定の深度までの表示
uv tree --depth 2
出力例:
myproject
├── requests v2.31.0
│ ├── charset-normalizer v3.3.2
│ ├── idna v3.4
│ ├── urllib3 v2.0.7
│ └── certifi v2023.7.22
└── pandas v2.1.3
├── numpy v1.25.2
├── python-dateutil v2.8.2
└── pytz v2023.3
インストールされているパッケージの一覧表示にはuv pip list
コマンドを使用できます:
# インストール済みパッケージの一覧表示
uv pip list
# アップデート可能なパッケージの確認
uv pip list --outdated
# 特定の形式での出力
uv pip list --format json
これらのコマンドを活用することで、プロジェクトのパッケージ構成を常に把握し、不要な依存関係や潜在的な競合を早期に発見できます。特に大規模なプロジェクトにおいては、定期的なパッケージツリーの確認が開発効率の向上とセキュリティリスクの軽減につながります。
uv runコマンドの活用
uv runコマンドは、Pythonプロジェクトでの開発体験を大幅に向上させる強力な機能です。従来のパッケージ管理ツールでは仮想環境の手動アクティベーションが必要でしたが、uv runを使用することで、より直感的でスムーズなワークフローを実現できます。このコマンドは自動的に適切な環境を選択し、必要な依存関係を管理しながらスクリプトやコマンドを実行します。
仮想環境を意識しないコマンド実行
uv runの最大の特徴は、仮想環境のアクティベーション作業を省略できる点にあります。通常のPython開発では、仮想環境をアクティベートしてからスクリプトを実行する必要がありましたが、uv runコマンドはこの手順を自動化します。
# 従来の方法
source .venv/bin/activate
python main.py
# uv runを使った方法
uv run python main.py
このコマンドは、プロジェクトディレクトリ内の仮想環境を自動的に検出し、適切な環境でPythonスクリプトを実行します。プロジェクトに複数の仮想環境が存在する場合でも、uvが最適な環境を選択してくれるため、環境の切り替えミスや依存関係の問題を回避できます。
さらに、uv runは以下のような様々なコマンド実行にも対応しています:
- Pythonスクリプトの直接実行
- インストール済みパッケージのCLIツール実行
- Pythonモジュールの-mオプション実行
- 対話型Pythonシェルの起動
スクリプト実行の基本操作
uv runコマンドでのスクリプト実行は、従来のpython実行コマンドの前に「uv run」を付けるだけの簡単な操作です。しかし、その背後では高度な環境管理が行われています。
# 基本的なスクリプト実行
uv run python script.py
# 引数付きでの実行
uv run python main.py --config config.json
# Pythonモジュールとしての実行
uv run python -m pytest tests/
# 対話型シェルの起動
uv run python
これらのコマンドは、プロジェクトのpyproject.tomlファイルに定義された依存関係を自動的に読み取り、必要なパッケージが仮想環境にインストールされていない場合は自動的にインストールを実行します。この機能により、環境セットアップの手間を大幅に削減することが可能です。
また、uv runは実行時のパフォーマンスも優秀で、環境の検出と起動が高速に行われるため、開発中の頻繁なスクリプト実行でもストレスを感じることがありません。
インラインメタデータを使った依存関係管理
uv runの最も革新的な機能の一つが、インラインメタデータを使った依存関係の指定です。これにより、スクリプトファイル内に直接必要な依存関係を記述し、実行時に自動的にそれらの依存関係を解決できます。
# script.py
# /// script
# requires-python = ">=3.8"
# dependencies = [
# "requests>=2.25.0",
# "click>=8.0.0",
# ]
# ///
import requests
import click
@click.command()
def main():
response = requests.get("https://api.example.com/data")
print(response.json())
if __name__ == "__main__":
main()
このスクリプトをuv runで実行すると、uvは自動的にrequestsとclickパッケージをインストールし、適切な環境でスクリプトを実行します。
uv run script.py
インラインメタデータの主要な利点は以下の通りです:
- スクリプトファイルが依存関係情報を含んでいるため、自己完結性が向上
- プロジェクトの設定ファイルを修正することなく、特定のスクリプト用の依存関係を管理
- スクリプトの共有時に依存関係の情報も一緒に伝達
- 一時的なスクリプトや実験的なコードでの依存関係管理が簡単
また、インラインメタデータでは依存関係だけでなく、Pythonバージョンの指定も可能です。これにより、スクリプトが特定のPythonバージョンを必要とする場合でも、uvが適切なバージョンを選択して実行環境を構築します。
uvxによる一時的ツール実行
uvxコマンドの概要
uvxは、Pythonツールを一時的に実行するための専用コマンドです。従来のpipxと同様の機能を提供しながら、uvの高速性を活かしてツールの実行を効率化します。uvxを使用することで、システム環境を汚染することなく、必要な時だけPythonベースのCLIツールやテストツールを実行できます。
uvxの最大の特徴は、ツールを一時的な分離環境で実行することです。これにより、グローバルインストールによる依存関係の競合を避けながら、迅速にツールを利用できます。また、Rust製のuvの恩恵を受けて、従来のpipxよりも大幅に高速な起動時間を実現しています。
CLIツールの一時実行
uvxを使用したCLIツールの一時実行は、開発作業を大幅に効率化します。例えば、コードフォーマッターやリンター、プロジェクト生成ツールなど、頻繁には使用しないが必要に応じて実行したいツールに最適です。
基本的な使用方法は以下の通りです:
# blackを使用したコードフォーマット
uvx black myfile.py
# cookiecutterでプロジェクトテンプレートを生成
uvx cookiecutter https://github.com/example/template
# pipenvの機能を一時的に使用
uvx pipenv --version
uvxは指定されたツールが存在しない場合、自動的にPyPIからダウンロードして実行します。実行後は一時的な環境が自動的にクリーンアップされるため、システム環境を清潔に保ちながらツールを活用できます。
テストツールの即座実行
テスト関連ツールの実行において、uvxは特に威力を発揮します。プロジェクトに常時インストールする必要のないテストツールを、必要な時だけ即座に実行できるため、プロジェクトの依存関係をスリムに保てます。
テストツールの実行例:
# pytestでテストを実行
uvx pytest tests/
# coverage.pyでカバレッジを測定
uvx coverage run -m pytest
uvx coverage report
# banditでセキュリティチェック
uvx bandit -r src/
# mypyで型チェック
uvx mypy src/
これらのツールは、プロジェクトの仮想環境にインストールすることなく実行できるため、プロジェクトの依存関係管理が複雑化することを防げます。特に複数のプロジェクトを並行して開発している場合、各プロジェクトで同じテストツールを重複してインストールする必要がなくなります。
uvxの主要オプション活用
uvxには実行環境をより細かく制御するための様々なオプションが用意されています。これらのオプションを適切に活用することで、より柔軟なツール実行が可能になります。
主要なオプションとその使用例:
# 特定のPythonバージョンでツールを実行
uvx --python 3.11 black myfile.py
# 追加パッケージと共にツールを実行
uvx --with requests httpie --json key=value httpbin.org/post
# 特定のパッケージバージョンを指定
uvx black==23.0.0 myfile.py
# インデックスURLを指定してツールをインストール
uvx --index-url https://custom-pypi.org/simple/ custom-tool
--with
オプションは特に有用で、メインツールに加えて必要な依存パッケージを一時的に追加できます。また、--python
オプションにより、プロジェクトとは異なるPythonバージョンでツールを実行することも可能です。これにより、互換性の問題を回避しながらツールを活用できます。
CLIツールのグローバル管理
Python uvでは、プロジェクト固有の依存関係だけでなく、システム全体で使用するCLIツールの管理も効率的に行えます。従来のpipによるグローバルインストールと異なり、uvはツールごとに独立した環境を作成するため、バージョン競合や依存関係の問題を回避しながら、複数のCLIツールを安全に管理できます。
ツールのインストールと管理
uvを使ってCLIツールをグローバルにインストールする場合、uv tool install
コマンドを使用します。このコマンドは各ツールを独立した仮想環境にインストールするため、他のツールや システムのPython環境に影響を与えません。
# 基本的なツールのインストール
uv tool install black
uv tool install flake8
uv tool install pytest
# 特定のバージョンを指定してインストール
uv tool install black==23.7.0
# GitHubリポジトリから直接インストール
uv tool install git+https://github.com/psf/black.git
インストールされたツールは、システムのPATHに自動的に追加されるため、どこからでも実行可能になります。また、uv tool upgrade
コマンドを使用することで、インストール済みのツールを最新バージョンに更新できます。
# 特定のツールをアップグレード
uv tool upgrade black
# すべてのツールをアップグレード
uv tool upgrade --all
インストール済みツールの確認
uvで管理されているCLIツールの状況を把握するには、uv tool list
コマンドが有効です。このコマンドを実行することで、現在インストールされているすべてのツールとそのバージョン情報を一覧表示できます。
# インストール済みツールの一覧表示
uv tool list
# より詳細な情報を表示
uv tool list --show-paths
出力例は以下のようになります:
black v23.7.0
├── black==23.7.0
├── click>=8.0.0
└── platformdirs>=2
flake8 v6.0.0
├── flake8==6.0.0
├── mccabe>=0.7.0,0.8.0
└── pycodestyle>=2.10.0,2.11.0
この表示により、各ツールの依存関係も含めて確認でき、環境の状態を正確に把握できます。また、uv tool uninstall
コマンドを使用することで、不要になったツールを完全に削除することも可能です。
ツール環境の分離
uvの最も重要な特徴の一つが、各CLIツールを完全に分離された環境で管理することです。従来のpipでグローバルインストールを行った場合、異なるツール間で依存関係が競合する問題が頻繁に発生していましたが、uvはこの問題を根本的に解決します。
各ツールは独自の仮想環境を持つため、以下のような利点があります:
- 依存関係の競合回避:異なるツールが同じライブラリの異なるバージョンを要求しても問題なし
- クリーンな環境維持:システムのPython環境を汚染せずにツールを管理
- 完全な削除:ツールをアンインストールする際に依存関係も含めて完全削除
- 独立したアップデート:各ツールを他に影響を与えずに個別更新可能
この分離機能により、開発者は安心して必要なCLIツールを追加でき、環境の整合性を保ちながら効率的な開発ワークフローを構築できます。また、プロジェクトを他の開発者と共有する際も、ツール環境の違いによる問題を最小限に抑えることが可能です。
# ツールの完全削除(依存関係も含めて)
uv tool uninstall black
# 複数のツールを一度に削除
uv tool uninstall black flake8 pytest
既存環境からの移行
既存のPython開発環境からuvに移行することで、パフォーマンスの向上や開発効率の改善を実現できます。現在多くのプロジェクトで使われているpoetryやrequirements.txtからuvへの移行は、適切な手順を踏むことでスムーズに実行できます。
poetryからuvへの移行手順
poetryで管理されているプロジェクトをuvに移行する際は、既存の設定を活用しながら段階的に移行を進めることが重要です。poetryのpyproject.toml
ファイルには、uvが理解できる標準的なPython仕様の設定が含まれているため、多くの設定をそのまま活用できます。
移行作業は以下の手順で実行します:
- 既存のpoetryプロジェクトのバックアップを作成
- uvのインストールと動作確認
pyproject.toml
ファイルの内容確認- poetry.lockファイルの情報を元に依存関係の再構築
- 新しい仮想環境での動作テスト
具体的な移行コマンドは次のようになります:
# poetryの依存関係をインストール
uv sync
# 既存の仮想環境を削除してuvで再作成
uv venv
# プロジェクトの依存関係を同期
uv sync --all-extras
poetryのlock情報は自動的にuvのlock形式に変換されるため、依存関係の整合性は維持されます。
requirements.txtとの互換性
requirements.txtを使用している従来のプロジェクトからuvへの移行は、uvの優れた互換性により簡単に実現できます。uvは既存のrequirements.txtファイルを直接読み込んで処理できるため、移行時の作業負荷を大幅に軽減できます。
requirements.txtからの移行では、以下の方法で依存関係を管理できます:
uv pip install -r requirements.txt
による直接インストールuv add
コマンドによる個別パッケージの追加- pyproject.tomlへの段階的な移行
開発用と本番用で異なるrequirements.txtファイルを使用している場合も、uvのオプショナル依存関係機能を活用して統合的に管理できます:
# 本番環境の依存関係
uv add requests fastapi
# 開発環境の依存関係
uv add --dev pytest black mypy
uvは既存のrequirements.txtファイルと完全に互換性があり、段階的な移行が可能です。
設定ファイルの変換作業
既存プロジェクトの各種設定ファイルをuv環境に適応させるための変換作業は、プロジェクトの継続性を保つ上で重要な工程です。主要な設定ファイルの変換では、既存の設定を保持しながらuvの機能を最大限活用できる形式に調整します。
変換対象となる主要な設定ファイルと対応方法:
既存ファイル | uv環境での扱い | 変換方法 |
---|---|---|
setup.py | pyproject.toml | メタデータと依存関係の移行 |
requirements.txt | pyproject.toml | dependencies セクションへの統合 |
requirements-dev.txt | pyproject.toml | optional-dependencies セクションへの移行 |
Pipfile | pyproject.toml | 依存関係とPythonバージョン設定の変換 |
pyproject.tomlへの変換例:
[project]
name = "my-project"
version = "0.1.0"
dependencies = [
"requests>=2.25.0",
"fastapi>=0.68.0",
]
[project.optional-dependencies]
dev = [
"pytest>=6.0.0",
"black>=21.0.0",
"mypy>=0.910",
]
CI/CDパイプラインの設定も合わせて更新する必要があります。GitHub ActionsやGitLab CIなどの設定ファイルで、poetryやpipコマンドをuvコマンドに置き換えることで、ビルド時間の短縮効果も期待できます。
設定変換時は、本番環境への影響を避けるため、必ず開発環境での十分なテストを実施してください。
開発環境との統合
Python uvの真価は、日常の開発環境にシームレスに統合された際に最大限に発揮されます。モダンな開発ワークフローでは、エディタやフォーマッター、CI/CDパイプラインなど様々なツールが連携して動作するため、uvをこれらの環境と適切に統合することで、開発効率を大幅に向上させることができます。
VSCodeでのuv環境設定
Visual Studio Codeでuvを活用するには、Python拡張機能との連携が重要です。まず、VSCodeのPython拡張機能がuvで作成した仮想環境を正しく認識するよう設定します。
VSCodeのコマンドパレット(Ctrl+Shift+P)から「Python: Select Interpreter」を選択し、uvで作成した仮想環境のPythonインタープリターを指定します。uvで作成した仮想環境は通常、プロジェクトディレクトリ内の.venv
フォルダに配置されているため、以下のパスを指定します:
.venv/bin/python # macOS/Linux
.venv\Scripts\python.exe # Windows
さらに効率的な運用のため、プロジェクトルートに.vscode/settings.json
ファイルを作成し、以下の設定を追加することを推奨します:
{
"python.defaultInterpreterPath": "./.venv/bin/python",
"python.terminal.activateEnvironment": true,
"python.formatting.provider": "black",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true
}
この設定により、VSCodeを開いた際に自動的にuv環境が認識され、統合ターミナルでも適切な仮想環境がアクティベートされます。
コードフォーマッターとの連携
uvは主要なPythonコードフォーマッターやリンターとスムーズに連携できます。Black、isort、flake8、pylintなどの開発ツールをuvで管理することで、チーム全体で統一されたコード品質を維持できます。
開発用依存関係として必要なフォーマッターをインストールします:
uv add --dev black isort flake8 pylint mypy
プロジェクトの設定ファイルpyproject.toml
にフォーマッター設定を追加することで、チーム間での設定統一が図れます:
[tool.black]
line-length = 88
target-version = ['py39']
[tool.isort]
profile = "black"
multi_line_output = 3
[tool.pylint.messages_control]
disable = ["C0330", "C0326"]
VSCodeの設定で"python.formatting.provider": "black"
を指定することにより、ファイル保存時の自動フォーマットが可能になります。さらに、プリコミットフックと組み合わせることで、コミット前の自動チェックも実現できます。
開発ワークフローの最適化
uvを中心とした開発ワークフローの最適化では、uv runコマンドを活用したスクリプト実行の効率化が鍵となります。プロジェクトのpyproject.toml
にカスタムスクリプトを定義することで、開発タスクを簡素化できます:
[project.scripts]
format = "black ."
lint = "flake8 src tests"
type-check = "mypy src"
test = "pytest tests/"
これにより、以下のコマンドで各種開発タスクを実行できます:
uv run format
– コードフォーマット実行uv run lint
– リンティング実行uv run type-check
– 型チェック実行uv run test
– テスト実行
CI/CDパイプラインとの統合では、GitHubActionsやGitLabCIで以下のようなワークフローを構築できます:
- name: Set up Python and uv
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install uv
run: curl -LsSf https://astral.sh/uv/install.sh | sh
- name: Install dependencies
run: uv sync
- name: Run tests
run: uv run test
uvの高速性により、CI/CDパイプラインの実行時間を大幅に短縮でき、開発チーム全体の生産性向上に寄与します。また、依存関係のロックファイルにより、本番環境と開発環境での完全な再現性が保証されます。
uvのメンテナンスと運用
Python uvを継続的に活用していくためには、適切なメンテナンスと運用が欠かせません。uvは活発に開発が進められているツールであり、定期的なアップデートによって新機能の追加やパフォーマンスの向上が図られています。また、環境の整理や問題解決のための手順も理解しておく必要があります。
uv自体のアップデート
uvは頻繁にアップデートがリリースされるため、最新機能やセキュリティパッチを適用するために定期的な更新が推奨されます。
uvのアップデートは、インストール方法によって手順が異なります。公式インストーラーを使用した場合は、以下のコマンドで簡単に更新できます:
# uvの最新版への更新
uv self update
pipを使用してインストールした場合は、通常のpipアップデート手順を使用します:
# pipでのuvアップデート
pip install --upgrade uv
Homebrewを使用している場合は:
# Homebrewでのuvアップデート
brew upgrade uv
現在のuvバージョンを確認するには:
# バージョン確認
uv --version
アップデート後は、既存のプロジェクトでの動作確認を行うことを推奨します。特に重要なプロジェクトでは、テスト環境でのアップデート検証を先に実施することが安全です。
アンインストール手順
環境の整理や他のツールへの移行が必要な場合、uvを完全にアンインストールする手順を理解しておくことが重要です。
uvのアンインストールは、インストール方法に応じて以下の手順で実行します:
公式インストーラーを使用した場合:
# uv自体のアンインストール
uv self uninstall
pipでインストールした場合:
# pipでのuvアンインストール
pip uninstall uv
Homebrewを使用した場合:
# Homebrewでのuvアンインストール
brew uninstall uv
完全な削除を行うためには、uvが作成したキャッシュディレクトリや設定ファイルも削除する必要があります:
- macOS/Linux:
~/.cache/uv
および~/.config/uv
- Windows:
%LOCALAPPDATA%\uv
および%APPDATA%\uv
アンインストール前に、uvで管理している仮想環境や重要なプロジェクト設定のバックアップを取ることを強く推奨します。
トラブルシューティング
uvを使用していると、時折発生する問題に対処する必要があります。一般的なトラブルと解決方法を理解しておくことで、スムーズな開発環境を維持できます。
キャッシュに関する問題の場合、キャッシュクリアが有効です:
# uvキャッシュのクリア
uv cache clean
依存関係の解決エラーが発生した場合は、以下のアプローチが効果的です:
- ロックファイルの再生成:
rm uv.lock && uv sync
- 制約の緩和: pyproject.tomlでのバージョン指定の見直し
- 詳細ログの確認:
uv sync -v
でデバッグ情報を取得
仮想環境の問題については:
# 仮想環境の再作成
rm -rf .venv
uv venv
uv sync
Pythonバージョンに関する問題では:
# 利用可能なPythonバージョンの確認
uv python list
# 特定バージョンの明示的インストール
uv python install 3.11
問題が解決しない場合は、uvのGitHubリポジトリのIssuesページで同様の問題が報告されていないか確認することをお勧めします。活発なコミュニティによって多くの問題解決例が共有されています。
また、複雑な問題の場合は、最小限の再現可能な環境を作成し、段階的に問題を特定していくアプローチが効果的です。このような体系的なトラブルシューティングにより、uvを安定的に運用することができます。