BackEnd

Pythonプロジェクト・パッケージ管理ツール「uv」とは

投稿日:2025年3月24日 更新日:

はじめに

以前、Pythonのパッケージ・プロジェクトマネージャとしてRyeを紹介しました。現在では、同じメンテナーによって後継である uv の開発が進められていて、新規プロジェクトでは uv の使用が推奨されています。
そこで、今回は uv について紹介します。

uvとは?

uvは、Rustで書かれたパッケージ・プロジェクトマネージャです。仮想環境の構築もすることができ、uvだけでPythonの環境構築から依存パッケージのインストール、プロジェクトの構築などが完結します。Rustで書かれていて、Pythonに依存していません。
と、Ryeと同じ特徴を持っているのですが、実はここ1年くらいでRyeと同じようなことができるようになってきていて、実用度が増してきています。例えばpoetryでモノレポ構成のプロジェクトをuvに移行することができるようになってきました。

uvを使ってみる

uvのセットアップ

まずは、uvを導入します。macOS / Linuxの場合は公式のスクリプトでインストールできます。
(brewでインストールすることもできるのですが、最新版の配信が遅く、最新のPythonを使えないことがあったので、公式スクリプトによるインストールが良いと思います。)

実際にプロジェクトを作ってみます。

初期状態では、以下のようなファイル構造となっています。

pyproject.toml.python-version といった、Pythonプロジェクトやpyenvでお馴染みのファイルが最初から入っています。実際、uvでもこれらのファイルを使ってプロジェクトが構成されています。

srcディレクトリを置き、その中にパッケージを作るようなディレクトリ構造にするにするには --package フラグを使用します。

すると、以下のようファイル構造となり、src配下の sample_project パッケージに対して実装をすることができるようになります。

この構成の方が、パッケージの外側にテストコードを書く場合に便利だと思います。
ここでsyncを実行することで、.venv内にPython仮想環境が構築されます。

.venv ディレクトリが生成され、その中に仮想環境が構築されるほか、ロックファイル uv.lock も合わせて生成されます。
ちなみに、 pyproject.toml で定義されたコマンドや、仮想環境内でパスが通っているコマンドを実行するには uv run コマンドを使いますが、このコマンドは uv sync も実行するため、 uv sync 前でも使うことができます。

仮想環境に入る

作られた仮想環境で、Pythonを実行してみます。まず、仮想環境に入るために以下のコマンドを実行します。

すると、以下のようにターミナルの左端にプロジェクト名が表示されるようになります。

この状態であれば、pythonを使うことができます。

仮想環境を抜けるには deactivate コマンドを使います。

依存パッケージの追加

fastapiを追加してみます。

開発用のパッケージは --dev オプションを使います。

すると、pyproject.tomlは以下のようになります。

fastapiは dependencies 、pytestは [depancy-groups] 内の dev に入りました。

さいごに

私は、現在ではpoetryプロジェクトの移行先にuvを使っていますが、以前はryeを使っていました。uvとryeは使い勝手や仕組みは似ているものの、完全に同じという訳ではないので、ryeプロジェクトは無理にuvに移行する必要はないかなと思いました。
uvの方が便利、使いたい機能がある! という場合は、ryeからの移行もありだと思います。また、現状poetryを使っている場合は、ぜひuvに移行してみてください!

おすすめ書籍

エキスパートPythonプログラミング 改訂4版 (アスキードワンゴ) Effective Python 第2版 ―Pythonプログラムを改良する90項目 動かして学ぶ!Python FastAPI開発入門

blog-page_footer_336




blog-page_footer_336




-BackEnd
-, ,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Go言語

Go 1.23 でslicesとmapsに追加された関数

1 はじめに2 slicesパッケージに追加された関数2.1 All2.2 Backward2.3 Values2.4 AppendSeq2.5 Collect2.6 SortedFunc2.7 Ch ...

軽量なAlpine Linuxイメージでgitbookのローカル環境を構築する

1 はじめに2 Alpine Linuxとは3 Docker本体のインストール4 サンプルリポジトリのダウンロード5 dockerイメージ作成6 Gitbook初期化&実行7 Dockerの ...

Go言語

Go言語の基礎〜Go 1.11 開発環境構築とパッケージバージョン管理〜

1 はじめに2 Go言語(Golang)とは2.1 シンプルな構文2.2 コンパイル言語2.3 並行処理2.4 その他の特徴3 Go開発環境の構築3.1 Goのインストール3.1.1 1. homeb ...

laravel logo

Inertia使ってみた①

1 はじめに2 Inertiaとは3 ルーティング4 LaravelからReactに値渡し5 レスポンス5.1 初回5.2 page object5.3 2回目以降5.4 リロード時6 さいごに7 お ...

laravel logo

DeployerでLaravelをデプロイ! 初期設定〜レシピのカスタマイズまで

1 はじめに2 Deployerの導入2.1 前提条件2.2 インストール3 デプロイの設定3.1 デプロイスクリプト3.2 サーバサイドの設定3.3 デプロイコマンド3.4 Deployerのディレ ...

フォロー

blog-page_side_responsive

2025年3月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。