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開発入門

page_footer_responsive




-BackEnd
-, ,

執筆者:

免責事項

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


comment

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

CAPTCHA


関連記事

uvの本番環境用dockerのマルチステージビルド

1 はじめに2 サンプルプロジェクトの作成3 シングルステージビルド4 uv流のマルチステージビルド4.1 便利オプションの紹介(おまけ)5 さいごに6 おすすめ書籍 はじめに uvで本番環境のdoc ...

laravel logo

Laravelで非同期実行する

1 はじめに1.1 動作環境2 準備2.1 デーブルの作成2.2 .envの修正3 ジョブの作成4 ジョブのディスパッチ5 キューワーカーを起動6 より細かな制御6.1 特定のキューにディスパッチする ...

aws

CodeWhispererを使ってみた

1 はじめに2 CodeWhispererとは3 導入4 使い方5 データの取り扱い6 さいごに7 おすすめ書籍 はじめに AWSからコード生成サービスのCodeWhispererが一般公開されたので ...

rails

form_withでフォームの送信前に処理を行う方法

1 はじめに2 form_with3 サンプル4 さいごに5 参考 はじめに フォームを送信する前に処理を行いたいケース(Google Analyticsのイベントのトラッキングなど)があると思います ...

laravel logo

Laravelのブラウザテスト「Dusk」で非同期で重たい処理のテストを実装してみよう

1 はじめに2 JavaScriptの式で待機する2.1 テスト対象となるコード2.2 Duskのテストコード3 DOM要素の表示を待つ3.1 テスト対象となるコード3.2 Duskテストコードの実装 ...

フォロー

blog-page_side_responsive

2025年3月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

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