uv — Rust 製 Python マネージャ
Python プロジェクト管理、コマンドラインツール管理、Python バージョン管理など一通りの機能を備える。 Rust 製で高速。
Installation
https://docs.astral.sh/uv/getting-started/installation/
## Linux and MacOS
curl -LsSf https://astral.sh/uv/install.sh | sh
## Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"Unix 系 OS では .bashrc, .bash_profile, .profile の全部に . "$HOME/.cargo/env" が追加される。 先に Rust の環境作っておけばカスタム可能かも。
Windows ではcurrent user & current host の .ps1 に PATH 設定が追記される。
ほかに pipx, pip, Homebrew, Docker でも入る。 先に Rust の環境があって Crate として入れる場合は GitHub から入れる:
pipx install uv
pip install uv
brew install uv # MacOS
winget install --id=astral-sh.uv -e # Windows
cargo install --git https://github.com/astral-sh/uv uvPython インストーラとしての使用
https://docs.astral.sh/uv/guides/install-python/
uv python install はサードパーティ製の binary distribution をとってくる。
uv python install- Python のバージョンを指定してインストール
- 指定しなければ最新版をインストール
-
0.8.0以降、 デフォルトのインストール先が~/.local/binになった。--no-binもしくは環境変数UV_PYTHON_INSTALL_BIN=0で避けられる。 uv python list- 利用可能なバージョン一覧を表示
uv python find- インストール済みのバージョンを表示
uv python pin- カレントプロジェクトで使用する Python のバージョンを固定
uv python uninstall- Python のバージョンを指定してアンインストール
インストール済みの Python があれば、uv は自動的にそれを使う:
~$ uv python list
cpython-3.13.0rc2-linux-x86_64-gnu <download available>
cpython-3.12.6-linux-x86_64-gnu <download available>
cpython-3.12.3-linux-x86_64-gnu /usr/bin/python3.12
cpython-3.12.3-linux-x86_64-gnu /usr/bin/python3 -> python3.12
cpython-3.12.3-linux-x86_64-gnu /bin/python3.12
cpython-3.12.3-linux-x86_64-gnu /bin/python3 -> python3.12Python をインストール:
~$ uv python install
Searching for Python installations
Installed Python 3.12.6 in 1.99s
+ cpython-3.12.6-linux-x86_64-gnu
~$ uv python list
cpython-3.13.0rc2-linux-x86_64-gnu <download available>
cpython-3.12.6-linux-x86_64-gnu .local/share/uv/python/cpython-3.12.6-linux-x86_64-gnu/bin/python3 -> python3.12
cpython-3.12.3-linux-x86_64-gnu /usr/bin/python3.12
cpython-3.12.3-linux-x86_64-gnu /usr/bin/python3 -> python3.12
cpython-3.12.3-linux-x86_64-gnu /bin/python3.12
cpython-3.12.3-linux-x86_64-gnu /bin/python3 -> python3.12プロジェクトでの使用
- https://docs.astral.sh/uv/guides/projects/
- https://docs.astral.sh/uv/concepts/projects/
- https://docs.astral.sh/uv/guides/publish/
プロジェクトの立ち上げ:
uv init hello
cd hello
# or
mkdir hello && cd hello
uv initデフォルトでは
.git/.gitignore.python-versionREADME.mdhello.py({project-name}.py)pyproject.toml
が作られ、すでに git init もされた状態で構築される (git があれば)。
どのようなプロジェクトにするかでいくつかオプションがある:
--package- パッケージ用プロジェクトとして立ち上げる。
-
{project-name}.pyの代わりにsrc/{project-name}/__init__.py --app- アプリケーション用プロジェクトとして立ち上げる。
--lib- ライブラリ用プロジェクトとして立ち上げる。
-
--package同様の__init__.pyと、加えてpy.typed
プロジェクト作成後に初めて uv run, uv sync, uv lock を使ったときに .venv/ と uv.lock も作られる。
pyproject.toml-
プロジェクトに関わる情報を書いておくファイル。 手動で編集してもいいし、
uv経由でツールを入れたりすると自動でdependenciesとかは更新される。 .venv/- 依存ツール等のインストール先
uv.lock-
pyproject.tomlよりも厳密な依存関係管理のためのファイル。
パッケージのインストール
プロジェクトで使用するパッケージの管理もすべて uv がやってくれる。 例えば開発用パッケージとして pytest を使う場合:
uv add pytest --dev自動で pyproject.toml に記述される:
[tool.uv]
dev-dependencies = [
"pytest>=8.3.3",
]Python 製コマンドラインツールの管理
Python 製コマンドラインツールを使うためのインターフェイスとして、 インストールせず一時的に実行する uvx と、インストールしてグローバルに使う uv tool が用意されている。 (uvx は uv tool run のエイリアス。) 一応、ほとんどの場面ではインストールせず一時的に使うことが推奨されているっぽい。
PEP 668 にある通り pip でグローバルに使うツールを入れることができなくなったので、 今のところその代わりとしても使える。
インストールせず一時的に使う
uvx ruff # or `uv tool run ruff`インストールして使う
uv tool install ruff
ruffその他コマンド:
uv tool upgrade- インストール済みツールのアップデート
uv tool list- インストール済みパッケージ一覧を表示
uv tool uninstall- アンインストール
uv tool dir- インストール先の PATH を表示
-
実行ファイルのバイナリは
${HOME}/.local/binに入る。 (--bin)