uv - 新たな Python パッケージ、プロジェクト、および環境マネージャー

Python uvの優れた点

目次

Python uv(「ユーヴィー」と発音)は、Rustで書かれた現代的で高パフォーマンスなPythonのパッケージおよびプロジェクト管理ツールです。pip、pip-tools、virtualenv、pipx、pyenvといった従来のPythonパッケージ管理ツールに置き換えられる設計となっており、Python開発ワークフローの簡素化と高速化を目的としています。

uvは、人気のPythonリンターであるRuffを開発したチームAstralによって開発されており、Rustのパフォーマンスと現代的なソフトウェアアーキテクチャを活用することで、Pythonエコシステムにおける一般的な課題(インストールの遅さ、依存関係の競合、複雑な環境管理など)を解決するように設計されています。

uv python ultra-violet spa

uvの主な機能

  • 卓越した速度: uvは従来のツールよりも著しく速く、キャッシュなしでpipの8〜10倍、ウォームキャッシュ状態で最大80〜115倍の高速性を発揮します。
  • オールインワンツール: パッケージのインストール、依存関係の解決、仮想環境の管理、Pythonバージョン管理、プロジェクトの足場作り、スクリプトの実行を1つのツールに統合しています。
  • 互換性: pip互換のコマンドラインインターフェースを提供しているため、急な学習コストなしに導入しやすくなっています。
  • 堅牢な依存関係管理: 再現可能な環境のために、正確な依存関係の解決とロックファイルのサポートを提供します。
  • 仮想環境の自動作成: 仮想環境を自動的に作成・管理し、手動でのセットアップを削減します。
  • クロスプラットフォームサポート: macOS、Linux、Windowsで動作します。
  • スタンドアロンインストール: PythonやRustなしで、シンプルなインストーラーやcurlを使用してインストール可能です。

uv vs poetry vs pdm vs pip performance comparison

なぜuvを使うのか、まだ迷っていますか?

  • パフォーマンス: パッケージのインストール時間や依存関係の解決時間を劇的に短縮します。
  • シンプルさ: 複数のツールを1つに統合し、プロジェクトのセットアップと管理を効率化します。
  • 信頼性: 明確なエラーメッセージと競合解決により、一貫性があり再現可能な環境を提供します。
  • モダンな標準: プロジェクト設定のためにpyproject.tomlをサポートし、現在のPythonパッケージング標準に準拠しています。

使用例

少しエキサイティングなことを試してみましょう!

  • 新規プロジェクトの開始:
uv init myproject
cd myproject
uv add requests
uv run python script.py

これにより、プロジェクトディレクトリが作成され、仮想環境がセットアップされ、依存関係がインストールされ、スクリプトが隔離された環境で実行されます。

  • インライン依存関係によるスクリプト管理:
uv add --script script.py requests
uv run script.py

uvは、個別のrequirementsファイルなしで、単一ファイルのスクリプトの依存関係も管理できます。

従来のツールとの比較

機能 uv pip/virtualenv Poetry
速度 非常に速い 遅い 中程度
仮想環境 自動 手動 自動
依存関係の解決 高度 基本的 高度
Pythonバージョン管理 あり なし (pyenvが必要) なし
ロックファイルサポート あり なし (pip-toolsが必要) あり
スクリプト実行 統合 なし 限定的

システムにUVをインストールして使い始める方法

システムにuvをインストールして使い始めるには、以下のシンプルな手順に従ってください。

インストール

  1. スタンドアロンインストーラー(推奨)
    • Linux/macOS:
curl -LsSf https://astral.sh/uv/install.sh | sh

または、wgetを好む場合:

wget -qO- https://astral.sh/uv/install.sh | sh
  • Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  • 特定バージョンのインストール: URLにバージョンを指定することで、特定バージョンのインストールを要求できます。例: https://astral.sh/uv/0.7.15/install.sh
  1. 代替手段: pip経由でのインストール(Pythonがインストールされている場合)
pip install uv

注: この方法は、システム全体のアクセスには推奨されません。何をしているのかを明確に理解している場合を除き、システムPython環境を散乱させる可能性があるためです。

  1. pipx経由でのインストール(隔離された、ユーザー全体のインストールのために)
pipx install uv

既にpipxを使用している場合、グローバルアクセスのためにこの方法の方がクリーンです。

始める

インストールの確認 - 以下のコマンドを実行します:

uv

uvがインストールされ、使用準備が整っていることを確認するためのヘルプメニューが表示されるはずです。

仮想環境の作成とアクティブ化

  • venvの作成:
uv venv test
  • Linux/macOSでのアクティブ化:
source test/bin/activate
  • Windowsでのアクティブ化:
.\test\Scripts\activate

これで、この環境にパッケージをインストールするためにuv pip install を使用できます。

新規プロジェクトの初期化

uv init

これにより、プロジェクト用のpyproject.tomlと.gitignoreが作成されます。

依存関係の追加

パッケージを追加します:

uv add

これにより、pyproject.tomlが更新され、ロックファイルが生成/更新されます。

依存関係の同期

環境内のすべての依存関係をインストールします:

uv sync

または、pip互換インターフェースを使用します:

uv pip install

これにより、ロックファイルに従ってすべての依存関係がインストールされることを保証します。

スクリプトの実行

以下を使用します:

uv run script.py

これにより、スクリプト用の環境と依存関係が自動的に管理されます。

シェル統合(オプション)

よりスムーズなワークフローのために、.zshrcまたは.bashrcにシェル統合を追加することで、デフォルトの仮想環境を自動的にアクティブにし、pipをuv pipにエイリアスすることができます。

これらの手順により、uvがインストールされ、スピードと手軽さを持ってPythonプロジェクトを管理できるようになります。

特定のPythonバージョンのインストール

uvを使用することで、特定のPythonバージョンをインストールし、プロジェクトのために管理できます。

  • 最新の安定版Pythonバージョンのインストール:
    uv python install
    
    このコマンドは、利用可能な最新の安定版Pythonバージョンをダウンロードしてインストールします。
  • 特定バージョンのインストール:
    uv python install 3.12
    
    これは、Python 3.12の最新のパッチリリース(例: 3.12.3)をインストールします。
  • 正確なパッチバージョンのインストール:
    uv python install 3.12.3
    
    これは、正確にPython 3.12.3をインストールします。
  • 複数バージョンのインストール:
    uv python install 3.9 3.10 3.11
    
    これは、Python 3.9、3.10、3.11をインストールします。
  • 制約条件に一致するバージョンのインストール:
    uv python install '>=3.8,=3.11"
    
    これは、プロジェクトのPythonバージョン要件を変更します。

追加の注意点

自動ダウンロード: デフォルトでは、システムに見つからない場合、uvは必要なPythonバージョンを自動的にダウンロードしてインストールします。

システムPython: 存在する既存のPythonインストールを使用することもできますし、--no-managed-pythonフラグを使用してシステムPythonの使用を強制することもできます。

アップグレード: uvが管理するPythonバージョンを最新のパッチリリースにアップグレードするには、以下を使用できます:

uv python upgrade 3.12

または、インストールされているすべてのバージョンをアップグレードします:

uv python upgrade

マイナーバージョン間のアップグレード(例: 3.12から3.13へ)はサポートされていません。

まとめると、uvは、プロジェクト内で特定のPythonバージョンをインストールし、管理し、使用するための柔軟で強力なツールを提供します。

UVは異なるシステムで利用可能なPythonインタープリターをどのように発見するのか

UVは、一連の定義されたロケーションをチェックし、各候補にそのバージョンメタデータを照会することで、異なるシステムで利用可能なPythonインタープリターを発見します。以下はその仕組みです:

  • UVが管理するPythonインストール:
    UVはまず、UV_PYTHON_INSTALL_DIR環境変数で指定されたディレクトリを参照し、そこに保存された自身で管理するPythonバージョンを確認します。
  • システムPATH:
    macOSおよびLinuxでは、UVはシステムPATHにリストされたディレクトリ内で、python、python3、またはpython3.x(xはバージョン番号)という名前の実行可能ファイルを確認します。Windowsでは、python.exeを探します。
  • Windows固有のロケーション:
    Windowsでは、UVはWindowsレジストリと、py --list-pathsの出力を使用して、Microsoft StoreのPythonインタープリターもチェックします。
  • 仮想環境:
    仮想環境がアクティブになっているか指定されている場合、UVはその他の場所を探す前に、その環境内のインタープリターが互換性があるかどうかを確認します。
  • メタデータクエリ:
    発見された各実行可能ファイルにそのバージョンメタデータがクエリされます。要求されたバージョン(またはバージョン制約)に一致する実行可能ファイルのみが考慮されます。非実行可能ファイルは無視されます。
  • 優先順位とフォールバック:
    デフォルトでは、UVはシステムPythonインストールを優先しますが、オプションを使用して管理対象を優先したり、管理対象/システムバージョンのみを使用するように調整できます。適切なインタープリターが見つからない場合、UVは必要なバージョンをダウンロードしてインストールできます。

この堅牢な発見プロセスにより、UVは異なるオペレーティングシステムや環境間で、正しいPythonインタープリターを確実に特定し、使用することができます。

便利なリンク

購読する

システム、インフラ、AIエンジニアリングの新記事をお届けします。