uv
pip, pip-tools, virtualenv のドロップインプレースツール。かなり速い。
shimizukawa.icon 初めは、Windowsではpipやvenvが遅いので、uvを使うことにしました。
shimizukawa.icon uv-0.3 でPythonの自動インストールに対応したのでtoxでのテストが捗りました。パッケージ管理もできるようになった
shimizukawa.icon uv-0.4 では配布しないプロジェクトのパッケージ管理も扱えるようになった
shimizukawa.icon 的uv目玉機能のリリースバージョン
uv-0.3.0 pythonインストール対応
uv-0.4.0 パッケージではないプロジェクトに対応
uv-0.4.16 uv publish 対応 (twine置き換え)
uv-0.4.27 dependency-groups (PEP-735) 対応
uv-0.5.3 競合するextraの解決(PyToach向け)
uv-0.5.4 --all-groups 対応
uv-0.5.6 uv build backend
UV_PREVIEW=1 https://github.com/astral-sh/uv/issues/3957#issuecomment-2517967239
uv-0.5.7 uv build backend
uv init --build-backend uv --preview https://github.com/astral-sh/uv/pull/9661
uv-0.5.19
Python-3.14 対応
動的バージョンはuv.lockから除外
setuptools_scm等でビルド毎にバージョンが変化するとuv.lockが毎回更新されてしまっていた問題の解消
uv-0.5.26
動的バージョンをuv.lockから除外する処理(0.15.19)のバグ修正
uv-0.6.0
色々破壊的変更が入っているので要チェック
uv publish がpreviewではなくなった
uv sync --script --active some.py で uv pip install にもパッケージを入れる(uv非対応のIDE向け)
uv-0.6.15
uv export が PEP-751 pylock.toml をサポート https://github.com/astral-sh/uv/issues/12584
基本
GitHub - astral-sh/uv: An extremely fast Python package installer and resolver, written in Rust.
Rust で書かれた非常に高速な Python パッケージインストーラとリゾルバ。pipとpip-compileを置き換えるものとして設計されています。
uvは、Ruffの開発者であるAstralの支援を受けています。
特徴
⚖️ 一般的な pip、pip-tools、virtualenv コマンドのドロップイン置き換え。
⚡️ pipおよびpip-tools(pip-compileおよびpip-sync)より10-100倍高速。
💾 依存性の重複排除のためのグローバルキャッシュにより、ディスクスペースが効率的。
uv は静的バイナリで、Rust や Python なしでインストールできます。
🧪 上位 10,000 の PyPI パッケージに対してアットスケールでテスト済み。
🖥️ macOS、Linux、Windows をサポート。
ᾐ 依存バージョンのオーバーライドや代替解決戦略などの高度な機能。
⁉️ 競合追跡リゾルバによるクラス最高のエラーメッセージ。
🤝 編集可能なインストール、Git依存性、直接URL依存性、ローカル依存性、制約、ソース配布、HTMLおよびJSONインデックスなど、幅広い高度なpip機能をサポート。
uvはデファクトになるのか?
pep対応速度が速い
https://peps.python.org/pep-0723/ script metadata
https://peps.python.org/pep-0735/ dependency group
https://peps.python.org/pep-0751/ dependency lock file も最初に対応しそう
実行速度が速い
uvx run ruff とか、隔離環境を作ってruffをインストールして実行まで、1秒かからない
uv run sphinx-build もインストールからビルド開始まで1秒かからない
多機能
パッケージング
Pythonインストール (tox-uvが強力)
プロジェクトのパッケージ依存管理
インストール手順
code:shell
curl -LsSf https://astral.sh/uv/install.sh | sh
shimizukawa.icon uv self update でアップデートしやすいので独自インストールが楽
uv-0.2
uv pip ... で今まで通りに操作できる。
つまり、 uv がpip コマンドを乗っ取るのではなく、 uv prefixを付けて使う。
uv venv がWindowsでめっちゃ速かった。
code:shell
PS C:\Users\shimi\Project\python3\uv> Measure-Command {python -m venv venv1}
TotalSeconds : 21.284732
PS C:\Users\shimi\Project\python3\uv> Measure-Command {uv venv venv2}
Using Python 3.12.0 interpreter at C:\Users\shimi\AppData\Local\Programs\Python\Python312\python.exe
Creating virtualenv at: venv2
Activate with: venv2\Scripts\activate
TotalSeconds : 0.1224727
uv-0.3
uv-0.3 でパッケージ管理やpythonインストールができるようなった!
uv: Unified Python packaging
これによって、 tox-uv が、環境にないpythonのインストールをしてくれたので全バージョンのテストができるようになった!
django-redshift-backend の環境管理をuvに移行
インストールまわり
.devcontainer/on_create_command.sh
uv
curl -LsSf https://astral.sh/uv/install.sh | sh
uv self update したいので、グローバルにインストールした
これまで devcontainer内にfeaturesで入れてたけど、起動後の環境でバージョン上げる手順でpipxが必要になるのを避けたかった
doc: https://docs.astral.sh/uv/getting-started/installation/
ruff
uv tool install -U ruff
doc: https://docs.astral.sh/uv/guides/tools/
tox + tox-uv
uv tool install -U tox --with tox-uv
doc: https://docs.astral.sh/uv/guides/tools/
doc: https://github.com/tox-dev/tox-uv
パッケージ
これまで devcontainer内はpipでグローバルインストールが良いかと思ってた
今後は、uv sync で.venv内に作る事にした(グローバルにpyprojectから入れるのは面倒そう)
uv sync --extra psycopg2-binary
doc: https://docs.astral.sh/uv/concepts/workspaces/
ビルド & check
uvx --from build pyproject-build --installer uv
uvx twine check dist/*
doc: https://docs.astral.sh/uv/guides/publish/
python自体のインストールもuv速いよ
GitHub Actionsの setup/python@v5: 16秒
uv python install + 170パッケージ: 1.75秒(キャッシュ済み環境)
uv-0.4
uv-0.4 では配布しないプロジェクトのパッケージ管理も扱えるようになった
devcontainer のSphinx-users.jp 環境の起動をuv対応、高速化、最新の知見を反映
https://github.com/sphinxjp/sphinx-users.jp/pull/121
ビルド & check
uv build が0.4.5で登場
uv build
uvx twine check dist/*
PyPIアップロード
uv publish が 0.4.16 で登場
ただし twine check の機能はない
GItHub Actions
setup-uv@v3 が速い
uv-0.5
https://github.com/jazzband/django-redshift-backend/pull/151
dependency-groups 登場 https://github.com/astral-sh/uv/releases/tag/0.4.27
build-system は setuptoolsとsetuptools_scm が使いやすい
haching はscmのtagでバージョンを自動化できない
pdm-backend はscmが使えて良い感じだけど同梱物の制御がめんどくさい
いずれuv独自のbackendが提供されたらまた検証したい
https://github.com/astral-sh/uv/issues/3957