パッケージ管理システム「uv」
パッケージ管理システムが必要とされる背景
Pythonを初学者に勧めたいメリットの一つとして、多様なサードパーティーパッケージによるエコシステムが存在します。Pythonには、AIやWeb開発に役立つパッケージが多種多様に開発され、その力を借りながら、初心者から熟練者まで多種多様なアプローチで高品質なプロダクトが製作できる点は、大きな魅力です。
また、こうしたエコシステムを活かすうえで重要となるのが、開発者間で同じ環境を再現可能にすることです。パッケージのバージョンやインストール状況が開発者ごとに異なると、同じコードであっても動作が変わってしまうことがあります。そのため、プロジェクトごとに環境を切り分け、確実に同じ依存関係を用いて動作させるしくみが必要となります。
しかし、その反面、参照パッケージ間のバージョン依存関係の競合や、インタプリタとパッケージのバージョンの整合性、またはOSに標準で付属するPythonやパッケージとの競合(PEP 668)などといった問題に直面することも少なくありません。
たとえば、かつては、pipを用いたパッケージ管理と、依存関係を記述したrequirements.txtを使って、ほかの人と同じ環境を再現するのが一般的でした。しかし、pipの依存関係解決のしくみでは、複雑な依存関係を持つプロジェクトでは、バージョンの競合が発生しやすく、手動での調整が必要になることもありました。その後、パッケージ管理を明確にする記述フォーマットとしてpyproject.toml
が公式で採用されました(PEP 518)。これにより、依存関係の管理がより明確になり、プロジェクトの構成が一元化され、スタンダードとなっています。
しかし、それでも完全な解決には至らないことも多く、特にビルド時間の長さやキャッシュの扱い、複雑な設定などが煩雑に感じられることもあります。とにかく、初学者が理解し扱えるようになるのは、たいへんにハードルの高いものであることだけは確かです。
こうした課題を背景に登場したのが、uv
という新しいPythonパッケージ・プロジェクト管理ツールです。uv
は、高速かつ信頼性の高い依存関係の解決と環境構築を目的として開発されており、Rustで書かれていることにより、従来のツールよりもパフォーマンスが大幅に向上しています。また、pyproject.toml
を用いることで、ほかのツールで記述されたパッケージ管理システムとの互換性も保っています。
uv
はpip
と同様に、パッケージをPyPI(Python Package Index)からダウンロードするため、これまでのPythonの多様なパッケージというエコシステムはそのまま享受できます。Pythonのさまざまなパッケージを利用することのできる柔軟性と利便性を維持しながら、依存関係のトラブルを最小限に抑えたい──そのような開発者のニーズに応える選択肢として、uv
は普及しつつあります。
当記事ではまず、このuv
をインストールし、実際に触れてみましょう。
インストール
インストールのために、公式ドキュメントからシェルスクリプトが用意されています。以下を、ターミナルやPowerShellで実行しましょう。あるいは、お使いのパッケージマネージャーを利用することもできます。
macOS / Linuxの場合
$ curl -LsSf https://astral.sh/uv/install.sh | sh
Windowsの場合
PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"