uvでPythonライブラリ管理!uv addとuv.lockの使い方

uvでPythonライブラリ管理!uv addとuv.lockの使い方

Python「uv」実践編!ライブラリ追加と依存関係管理をマスター

こんにちは!前回に引き続き、Pythonの超高速パッケージ管理ツール「uv」について学んでいきます。

前回は、uv init でプロジェクトを作成し、uv run で実行するところまで試しました。
今回は、Python開発に欠かせない「ライブラリのインストール」を uv でどう行うのか、実際にやってみた記録を残していきます!

pip install に慣れている方も、uv のスマートなパッケージ管理を体験してみましょう!

1. まずは目標設定!Flask + PostgreSQL 環境構築

ライブラリをインストールする前に、今回の学習プロジェクトの目標を決めます。
現在学習中の **Flask** を使ったWebアプリケーション開発と、**PostgreSQL** を使ったデータベース操作の学習環境を、uv を使って構築することにしました。

つまり、「Flaskの学習プロジェクトをuvで立ち上げよう!」ということです。

2. ライブラリをインストール! `uv add` を試す

普段、Pythonでライブラリをインストールする際は、


pip install ライブラリ名

というコマンドを使いますよね。

uv でライブラリをインストールするには、主に2つの方法があります。

  1. pyproject.toml ファイルの dependencies にライブラリ名を追加し、uv sync コマンドで環境を同期する。
  2. uv add ライブラリ名 コマンドを実行する。

どちらの方法でも良いのですが、今回は uv add ライブラリ名 を試してみることにしました。

仮想環境のアクティベート

uv add コマンドを実行する前に、uv が作成した仮想環境をアクティベートする必要があります。
(前回 uv run を実行した際に、.venv ディレクトリが作成されているはずです。)

ターミナルで以下のコマンドを実行します。


source .venv/bin/activate

プロンプトの先頭に `(.venv)` と表示されれば、アクティベート成功です。

uv add flask の実行

仮想環境がアクティベートされた状態で、いよいよFlaskをインストールします。


uv add flask

実行すると、以下のような出力が表示されました。


Resolved 9 packages in 232ms
Prepared 7 packages in 134ms
Installed 7 packages in 6ms
 + blinker==1.9.0
 + click==8.1.8
 + flask==3.1.0
 + itsdangerous==2.2.0
 + jinja2==3.1.6
 + markupsafe==3.0.2
 + werkzeug==3.1.3

ターミナルで `uv add flask` を実行した結果

Flask本体だけでなく、依存関係にあるライブラリ (blinker, clickなど) も一緒にインストールされているのが分かりますね。
そして、処理速度がめちゃくちゃ速い…!

pyproject.toml の自動更新

uv add flask を実行した後、pyproject.toml ファイルを確認してみると…


[project]
# ... (省略) ...
dependencies = [
    "flask>=3.1.0", # この行が自動で追加されている!
]

なんと、dependencies"flask>=3.1.0" が自動で追加されていました!
わざわざ手動で編集する必要がないのは、とても楽ですね。

uv.lock ファイルの自動生成

さらに、プロジェクトディレクトリに uv.lock という新しいファイルが作成されていることに気づきました。

中身を見てみると…


# uv.lock (一部抜粋)
version = 1
requires-python = ">=3.11"

[[package]]
name = "blinker"
version = "1.9.0"
source = { registry = "https://pypi.org/simple" }

[[package]]
name = "click"
version = "8.1.8"
source = { registry = "https://pypi.org/simple" }
requires-python = ">=3.8"

[[package]]
name = "flask"
version = "3.1.0"
source = { registry = "https://pypi.org/simple" }
requires-python = ">=3.8"
dependencies = [
    { name = "blinker" },
    { name = "click" },
    { name = "itsdangerous" },
    { name = "jinja2" },
    { name = "werkzeug" },
]

# ... (以下、依存関係の詳細が続く) ...

この uv.lock ファイルは、インストールされたライブラリとその正確なバージョン、依存関係を記録しておくためのものです。
主な役割は以下の2つです。

  • 依存関係の固定: プロジェクトで使用するライブラリのバージョンを固定し、他の環境でも同じバージョンのライブラリがインストールされるようにします。
  • 再現性の確保: uv.lock ファイルがあれば、どの環境でも同じ依存関係を再現できるため、開発環境と本番環境での動作の違いを防ぐことができます。

npmpackage-lock.jsonyarnyarn.lock と同じような役割ですね。

当初試そうと思っていた「pyproject.toml を編集して uv sync」という方法も、結局はこの uv.lock を使って環境を同期する仕組みのようです。
であれば、普段のライブラリ追加は uv add を使うのがシンプルで良さそうだと感じました。

ついでに、今回の目標に必要な Flask-SQLAlchemyuv add で追加しておきました。


uv add Flask-SQLAlchemy

3. requirements.txt を作成する (`uv pip compile`)

開発したアプリケーションをサーバーなどにデプロイする際、requirements.txt ファイルが必要になることがあります。

uv を使って requirements.txt を作成するには、以下のコマンドを実行します。


uv pip compile pyproject.toml -o requirements.txt

このコマンドは、pyproject.tomldependencies を元に、依存関係を解決し、requirements.txt ファイルとして出力してくれます。

実際に生成された requirements.txt を見てみると、普段 pip freeze で作成するものとは少し形式が異なりますが、ライブラリとバージョンが記述されており、問題なく使えそうです。

これで、デプロイの準備もバッチリですね!

4. まとめとこれから

今回は、uv を使ってPythonライブラリをインストールする方法 (uv add) と、その際に自動生成される uv.lock ファイルの役割、そして requirements.txt を作成する方法 (uv pip compile) について学びました。

uv add を使うことで、

  • ライブラリのインストール
  • pyproject.toml への依存関係の追加
  • uv.lock ファイルによる依存関係の固定

が一度に行えるのは、非常に効率的だと感じました。

uv はまだ新しいツールですが、その高速性と利便性から、今後のPython開発のスタンダードになる可能性を秘めていると思います。

新しいツールを導入するのは、最初は少し面倒に感じるかもしれませんが、「これでいいや」と現状維持に甘んじず、新しい技術に触れ続けることは、エンジニアとしての成長に繋がるはずです。
私も、これから積極的に uv を使って、その真価を体験していきたいと思います!

Comments

No comments yet. Why don’t you start the discussion?

    コメントを残す

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