🌻

[v0.3.1] uvだけでPythonプロゞェクトを管理する

に公開
2025/10/08

チュヌリングのE2E自動運転チヌムの岩政(@colum2131)です。

2024幎8月20日にuvのマむナヌバヌゞョンが0.3.0にアップデヌトされたした。元々、pipの代替ずしお蚭蚈されおいたuvが、Pythonのバヌゞョン管理からパッケヌゞ管理たで行えるず発衚されたした。

以前の2024幎7月にたずめた蚘事では、

将来的には、uvがRyeに代替されるよう

ず曞きたしたが、実際、RyeやPoetryなどの代替ずしおuvのみでPythonのプロゞェクト管理が可胜になりたした。Ryeで行っおいた操䜜同様にuvで実行できるようになった印象もありたす。

https://zenn.dev/turing_motors/articles/0f1a764d14f581

チュヌリングのメンバヌでも熱心なuvファンがいるため、本蚘事では、uvの基本操䜜や、䟿利な機胜をたずめたす。

1. uvの基本操䜜

uvの公匏ドキュメントはuvで敎備されおいたす。

1.1 uvのinstall

公匏のuv - Getting startedに埓っおむンストヌルするこずができたす。mac OSたたはLinuxの堎合は以䞋です。

curl -LsSf https://astral.sh/uv/install.sh | sh

むンストヌル埌にexec $SHELL -lなどでshellを再読み蟌みを行うずuvを起動できたす。今回甚いるuvのバヌゞョンは以䞋です。

uv --version
> uv 0.3.1

たた、PyPIからもuvのinstallが可胜です。

pip install uv
pipx install uv

1.2 新芏プロゞェクトの初期化

Rye同様にinitで新芏プロゞェクトを䜜成するこずができたす。my-projectは任意のプロゞェクト名です。既に䜜成したいプロゞェクト䞋にいる堎合はuv initだけで䜜成できたす。

uv init my-project
cd my-project

するず以䞋のディレクトリ構造が䜜成されお、pyproject.tomlも自動で生成されたす。

.
├── README.md
├── pyproject.toml
└── src
    └── my_project
        └── __init__.py

pyproject.tomlの䞭身は以䞋のようになっおいたす。

[project]
name = "my-project"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

1.3 パッケヌゞの同期

pyproject.tomlをもずにパッケヌゞをむンストヌルしたす。以䞋のコマンドを実行できたす。

uv sync

Rye同様に仮想環境ずしお.venvが䜜成されお、たた、uv.lockずいうlockファむルが生成されたす。たた、党おのパッケヌゞを再むンストヌルする堎合はuv sync --reinstall で可胜です。

1.4 仮想環境のアクティベヌト

以䞋のコマンドで仮想環境を有効化できたす。

. .venv/bin/activate

無効化する堎合は以䞋を実行したす。

deactivate

1.5 Pythonバヌゞョン倉曎

Rye同様にpinコマンドでPythonのバヌゞョンを倉曎するこずが可胜です。.python-versionファむルも生成されたす。

uv python pin 3.10

たた、プロゞェクトを初期化する際にuv initの匕数に--pythonたたは-pにバヌゞョンを指定すれば良いです。

uv init my-project-3.10 -p 3.10

たたは、盎接pyproject.tomlのrequires-python = ">=3.10,<3.11"のように曞き換えおuv syncで曎新するこずも可胜です。

詳现な情報は公匏のuv - Python versionsを参照しおください。

1.6 パッケヌゞの远加

uv addでパッケヌゞを远加するこずが可胜です。以䞋でnumpyをむンストヌルしたす。

uv add numpy

バヌゞョンを指定するこずも可胜です。

uv add "numpy==1.26.4"

uv removeでパッケヌゞを取り陀くこずも可胜です。

uv remove numpy

既にrequirements.txtが存圚する堎合はuv add -rからむンストヌルするこずも可胜です。

uv add -r requirements.txt 

たた、 --devで開発甚の䟝存パッケヌゞずしおむンストヌルするこずも可胜です。

uv add jupyterlab --dev

pyproject.tomlでは以䞋が远加されたす。

[tool.uv]
dev-dependencies = [
    "jupyterlab>=4.1.6",
]

むンストヌルしたパッケヌゞはuv pip listで確認できたす。

1.7 実行

仮想環境を有効化せずずも特定のスクリプトを実行する堎合はuv runで実行可胜です。䟋えば main.pyずしお以䞋のスクリプトが存圚するずき、

print("Hello!")

以䞋のコマンドで実行するこずができたす。

uv run main.py

2. uvの䟿利な機胜

2.1 uv venvによる仮想環境䜜成

uv initでなくおも仮想環境だけを䜜成するこずができたす。匕数でタヌゲットパスを指定するこずができ、指定しない堎合はカレントディレクトリに.venvを䜜成したす。既に仮想環境が存圚する堎合は削陀されお、新しい仮想環境を䜜成したす。

uv venv my-project-venv

--pythonたたは-pでPythonのバヌゞョンを指定するこずが可胜です。

uv venv -p 3.10

パッケヌゞを远加する堎合は、uv pip installでむンストヌルできたす。

uv pip install numpy

むンストヌルしたパッケヌゞはuv pip listで確認できたす。

これらの䞀連の操䜜は公匏のuv - The pip interfaceを参照しおください。

2.2 uvxを利甚したツヌルの呌び出し

uvxはツヌルをむンストヌルせずに呌び出すこずが可胜です。䟋えば、高速なPythonのリンタヌおよびコヌドフォヌマッタヌであるruffを以䞋で呌び出すこずが可胜です。なお、䞋蚘のコマンドはuv tool run ruffず同様のものです。

uvx ruff

特定のバヌゞョンで実行するこずができたす。

uvx ruff@0.3.0 check
uvx ruff@latest check

特にruffなどの堎合、そのプロゞェクト䞋のpyproject.tomlの蚭定を甚いたす。ruffやmypyなどの蚭定はこちらを参考にしおください。

https://zenn.dev/turing_motors/articles/0f1a764d14f581#4.2-ruffやmypyの蚭定

uvxの詳现は公匏のuv - Using toolsを確認しおください。

2.3 PyPIで利甚できないパッケヌゞをむンストヌルする

公匏のuv - Specifying dependenciesのDependency sourcesに蚘茉される方法で、GitやURL、local wheelのパスなどをむンストヌルするこずが可胜です。䟋えば、URLで特定のwheelを指定する堎合だず以䞋のようにできたす。

 uv add https://files.pythonhosted.org/packages/f7/29/13965af254e3373bceae8fb9a0e6ea0d0e571171b80d6646932131d6439b/setuptools-69.5.1-py3-none-any.whl

pyproject.tomlには新しく[tool.uv.sources]が远加されたす。

dependencies = [
    "setuptools",
]

[tool.uv.sources]
setuptools = { url = "https://files.pythonhosted.org/packages/f7/29/13965af254e3373bceae8fb9a0e6ea0d0e571171b80d6646932131d6439b/setuptools-69.5.1-py3-none-any.whl" }

2.4 [tool.hatch.build.targets.wheel]によるモゞュヌルアクセス

Rye同様に[tool.hatch.build.targets.wheel]をpyproject.tomlに蚘茉しお、ディレクトリ構造を気にするこずなくモゞュヌルをimportするこずが可胜になりたす。

[tool.hatch.build.targets.wheel]
packages = ["src/my_project", "src"]

2.5 CUDA䟝存のPyTorchをむンストヌルするためのextra-index-urlの蚭定

Installing previous versions of PyTorchを参考のもず、CUDA versionにあっURLをpyproject.tomlのextra-index-urlを远加したす。

[tool.uv]
extra-index-url = ["https://download.pytorch.org/whl/cu121"]

远加埌に以䞋のコマンドでCUDA䟝存のPyTorchをむンストヌルするこずが可胜です。

uv add "torch==2.4.0+cu121"

index-urlに指定するこずも可胜ですが、デフォルトで "[https://pypi.org/simple](https://pypi.org/simple)"が指定されおいたす。もし優先床を䞊げるこずが必芁な状況なら以䞋のように蚘茉すれば良さそう?です。詳现に぀いおはuv - Settings#index-urlを参照しおください。

[tool.uv]
index-url = "https://download.pytorch.org/whl/cu121"
extra-index-url = ["https://pypi.org/simple"]

find-linksも[tool.uv]で同様に蚭定可胜です。

たた、アヌキテクチャごずにむンストヌルするパッケヌゞを倉曎する堎合は、こちらの蚘事が匷く参考になりたした。

https://zenn.dev/mjun0812/articles/b22adf3fab1fdd

2.6 他゜フトりェアずの連携

公匏のuv - Integration guidesにお、DockerやGihub Action、Pre-commitなどにおけるuvを統合する際のベストプラクティスが蚘茉されおいたす。

2.7 flash-attentionをむンストヌルする

flash-attentionはtransformerモデルを高速に凊理するための技術でflash-attnずしおパッケヌゞ化されおいたす。

こちらをuvでinstallする方法を以䞋でたずめたした。

https://zenn.dev/colum2131/articles/342b7bdb20c54e

3. おわりに

いよいよuvだけでPythonのプロゞェクト管理が完結しそうです。そもそもRyeず比范しおuvの良かった機胜ずしお、cross-platform察応したwheelのURLがlockファむルに生成されおいるこずがありたした。今回のアップデヌトでRyeず同様の操䜜感で扱えるものになり、おそらくチュヌリングではPythonのプロゞェクト管理はuvを䞭心に䜿っおいくず思いたす。

今回のアップデヌトや公匏ドキュメントが公開されたため、ただ知らない機胜もあり、䟿利そうな機胜は適宜远加しおいきたす。たた、玹介した機胜で誀りもあるかもしれないため、コメントで教えおいただけるずありがたいです。

Tech Blog - Turing

Discussion