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
-, ,

執筆者:

免責事項

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

関連記事

aws

AWS BatchはSaaSの非同期処理に向いているか?

はじめに 今回は、AWS Batchを実際に構築し、SaaSの非同期処理に向いているか検証したいと思います。 AWS Batchの要素 コンピューティング環境 ジョブの実行環境を定義します。実行環境と ...

WebアプリからLINEのメッセージを送る方法

はじめに 以前、WebアプリケーションにLINEログインを組み込む方法を紹介しました。そこで今回はWebアプリケーションからLINEのメッセージを送る方法を紹介します。 Messaging APIとは ...

Kotlinでのnullの基本的な扱いかた

はじめに こんにちは。今回は改めてKotlinでのnullの扱いについての基本をまとめます。 曖昧な理解のままAndroidStudioの補完に頼りきりでしたので、基本的な書き方を網羅することで、Ko ...

laravel logo

Laravelの便利なメールアドレスのバリデーション設定

はじめに 最近、Laravelを使用した案件でメールアドレスでユーザー登録をしてもらう際に、バリデーションを掛けているにも拘らず不正なメールアドレスが登録される不具合がありました。 バリデーションルー ...

laravel logo

Laravelのバッチ処理を作る

はじめに こんにちは。webアプリにつきもののバッチ処理ですが、もちろんLaravelでもサポートされていて、crontabに書き散らすことなくバッチを設定できます。 今回はLaravelでコンソール ...

フォロー

blog-page_side_responsive

2025年3月
日 月 火 水 木 金 土
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

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