uv
shimizukawa.icon 初めは、Windowsではpipやvenvが遅いので、uvを使うことにしました。 shimizukawa.icon uv-0.3 でPythonの自動インストールに対応したのでtoxでのテストが捗りました。パッケージ管理もできるようになった
shimizukawa.icon uv-0.4 では配布しないプロジェクトのパッケージ管理も扱えるようになった
shimizukawa.icon 的uv目玉機能のリリースバージョン
基本
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対応速度が速い
実行速度が速い
uvx run ruff とか、隔離環境を作ってruffをインストールして実行まで、1秒かからない
uv run sphinx-build もインストールからビルド開始まで1秒かからない
多機能
パッケージング
Pythonインストール (tox-uvが強力)
プロジェクトのパッケージ依存管理
インストール手順
code:shell
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インストールができるようなった!
これによって、 tox-uv が、環境にないpythonのインストールをしてくれたので全バージョンのテストができるようになった!
django-redshift-backend の環境管理をuvに移行
インストールまわり
uv
curl -LsSf https://astral.sh/uv/install.sh | sh
uv self update したいので、グローバルにインストールした
これまで devcontainer内にfeaturesで入れてたけど、起動後の環境でバージョン上げる手順でpipxが必要になるのを避けたかった ruff
uv tool install -U ruff
tox + tox-uv
uv tool install -U tox --with tox-uv
パッケージ
これまで devcontainer内はpipでグローバルインストールが良いかと思ってた
今後は、uv sync で.venv内に作る事にした(グローバルにpyprojectから入れるのは面倒そう)
uv sync --extra psycopg2-binary
ビルド & check
uvx --from build pyproject-build --installer uv
uvx twine check dist/*
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対応、高速化、最新の知見を反映
ビルド & check
uv build
uvx twine check dist/*
PyPIアップロード
ただし twine check の機能はない
GItHub Actions
setup-uv@v3 が速い
uv-0.5
いずれuv独自のbackendが提供されたらまた検証したい