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


関連記事

RubyのHanamiチュートリアルをやってみた

1 はじめに2 紹介2.1 Hanamiとは?2.2 Hanamiを選ぶ理由2.2.1 軽量2.2.2 アーキテクチャとして2.2.3 スレッドセーフ3 チュートリアルのための準備4 実践4.1 はじ ...

laravel logo

laravel-enumを使ってみたら快適だった

1 はじめに2 enumについて3 環境4 導入5 enumクラス5.1 生成5.2 enumクラス編集5.3 日本語化6 マイグレーション6.1 生成6.2 編集7 プロパティのキャスト8 さいごに ...

WebアプリケーションにLINEログインを組み込む

1 はじめに2 LINEログインとは2.1 LINEログインでできること2.2 LINEログインのフロー3 LINEログインの設定3.1 プロバイダーを新規作成する3.2 チャネルを作成する3.3 リ ...

Go言語

Go言語の基礎〜基本構文その2〜

1 はじめに2 配列3 スライス3.1 スライスの宣言3.2 len3.3 append3.4 range3.5 値の切り出し3.6 可変長引数4 map4.1 宣言と初期化4.2 マップの操作4.3 ...

Laravelのchunkメソッドとcursorメソッドのメモリ使用量

1 はじめに2 テスト用のデータ準備3 get()4 chunk()5 chunkById()6 cursor()7 さいごに8 おすすめ書籍 はじめに テーブルの全レコードに一括で処理を行うバッチを ...

フォロー

blog-page_side_responsive

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

アプリ情報

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