概要
- uv はPythonスクリプトの依存関係管理と実行を自動化するツール
- 仮想環境の手動管理なしで スクリプトごとに依存関係を分離
- インラインメタデータ やコマンドライン引数で依存関係を宣言可能
- 依存関係のロック や再現性向上のための機能も搭載
- Shebang やGUIスクリプト、異なるPythonバージョンにも対応
uvによるPythonスクリプトの実行と依存関係管理
-
Pythonスクリプト は、通常
python <script>.pyの形式で実行 -
uv を利用することで、依存関係の管理や仮想環境の構築を自動化
-
Python環境 ごとにパッケージを分離することで、スクリプト間の干渉を防止
-
uv run コマンドで依存関係のないスクリプトを即時実行可能
- 例:
example.pyprint("Hello world")$ uv run example.pyHello world
- 例:
-
標準ライブラリのみ利用 の場合も追加作業不要
-
引数の受け渡し や 標準入力からのスクリプト実行 もサポート
-
プロジェクトディレクトリ (
pyproject.tomlが存在)では、デフォルトでプロジェクトの依存関係もインストール- プロジェクト依存を無視するには
--no-projectオプションを利用
- プロジェクト依存を無視するには
依存関係付きスクリプトの実行
- 追加パッケージ が必要な場合、
--withオプションで依存関係を指定- 例:
$ uv run --with rich example.py
- 例:
- バージョン指定 や 複数依存関係 も対応
- プロジェクト依存と組み合わせ も可能だが、
--no-projectで除外可能
インラインメタデータによるスクリプト管理
-
Python標準のインラインメタデータ で依存関係やPythonバージョンをスクリプト冒頭に宣言
-
uv init --scriptで雛形を作成 -
uv add --scriptで依存関係を追加・更新-
TOML形式でスクリプト冒頭に記載される
# /// script # dependencies = [ # "requests<3", # "rich", # ] # ///
-
-
インラインメタデータ利用時 はプロジェクト依存は無視される(
--no-project不要) -
requires-python で必要なPythonバージョンも宣言可能
-
依存関係なし の場合も空リスト必須
シェバングによる実行ファイル化
- シェバング (
#!/usr/bin/env -S uv run --script)でスクリプトを直接実行可能 - 実行権限を付与後、
./greetのようにコマンドとして利用 - インラインメタデータ と組み合わせて依存宣言も可能
代替パッケージインデックス
- --index オプションでPyPI以外のインデックス利用可能
- インラインメタデータにインデックス情報が追加される
- 認証が必要な場合 は公式ドキュメント参照
依存関係のロックと再現性向上
- uv lock --script で依存関係を.lockファイルに固定
- ロックファイルが存在する場合、以降の操作はロック内容を再利用
- exclude-newer フィールドでパッケージ取得日を制限し、将来の実行時の再現性を担保
- RFC 3339形式で日時指定
Pythonバージョンの指定
- --python オプションで任意のPythonバージョンを指定して実行
- 未インストールの場合は自動ダウンロード
- 詳細は公式ドキュメント参照
GUIスクリプトの対応
- .pyw拡張子 のファイルはWindowsでpythonwを使用して実行
- 依存関係付きGUIスクリプト も
--withオプションで対応
次のステップ
- さらなる詳細は コマンドリファレンス や uvのツール実行・インストール方法 のガイドを参照