はじめに
Databricksノートブックで、ついに uv が使えるようになりました。
ノートブックスコープのPythonライブラリインストールに、これまで使われてきた %pip に加えて、新たに %uv pip マジックコマンドが追加されています。uvはAstral社 (Ruffの開発元) が開発したRust製のPythonパッケージマネージャーで、近年のPythonエコシステムにおける最大のゲームチェンジャーの一つです。
この機能はサーバレスノートブックの環境バージョン5以降で利用可能です。実際に試してみたら、依存ツリーが深いパッケージでは 約3倍の高速化 を確認できました。
ドキュメントは以下です。
%uv pip とは
%uv pip は、%pip の高速な代替手段として提供されるマジックコマンドです。次のような特徴があります。
- uvパッケージマネージャーがバックエンド: Rust製の高速なパッケージインストーラ
-
%pipと同じ仮想環境を共有: 一方でインストールしたパッケージはもう一方からも参照可能 -
既存の
%pipパターンと互換: ボリューム、ワークスペースファイル、requirements ファイル、バージョン管理システム、プライベートリポジトリといったインストール方法もすべて利用可能 - 読み取り専用操作 (例:
list) も高速化 -
依存解決のステージが明示的に表示される:
Resolved/Prepared/Installedの各フェーズで所要時間が表示されるため、ボトルネックが分かりやすい
利用要件
%uv pip は以下の環境でのみ利用できます。
- サーバレスノートブック
- 環境バージョン5以降
クラシックコンピュート、および環境バージョン4以前のサーバレスではサポートされていません。これからuvを試したい方は、ノートブック右側の 環境 サイドパネルから 基本環境 を Standard v5 に切り替えてください。
なお、サーバレス環境バージョン5に切り替えても ValueError: %uv pip magic is not enabled. というエラーが出る場合があります。%uv pip は段階的にロールアウトされている機能のため、ワークスペースやリージョンによってはドキュメント記載済みでもまだ利用できない可能性があります。エラーが出た場合は、しばらく経ってから再度試してみてください。
実際に試してみた
軽量パッケージから依存ツリーが深いパッケージまで、3パターンで比較しました。
検証1: プリインストール済みパッケージ (simplejson)
simplejson はサーバレスにプリインストール済みのため、両者とも実質的なインストール作業は発生しません。
%pip install simplejson
出力:
Requirement already satisfied: simplejson in /local_disk0/...
コマンド所要時間: 2.90秒
%uv pip install simplejson
出力:
Using Python 3.12.3 environment at: /local_disk0/...
Audited 1 package in 52ms
コマンド所要時間: 2.31秒
%uv pip の出力に注目すると、Audited 1 package in 52ms と表示されています。つまりuv自体の処理は52ミリ秒で完了しており、残りの時間はマジックコマンドやカーネルとのやり取りのオーバーヘッドです。プリインストール済みパッケージへの操作ではセル全体の体感差はあまりありません。
検証2: 実ダウンロードが発生するケース (polars)
プリインストールされていない polars で本格的に比較します。約56MBのwheelを実ダウンロードするケースです。
%pip install polars
コマンド所要時間: 4.60秒
%uv pip install polars
出力:
Using Python 3.12.3 environment at: /local_disk0/...
Resolved 2 packages in 55ms
Downloading polars-runtime-32 (53.6MiB)
Downloaded polars-runtime-32
Prepared 2 packages in 713ms
Installed 2 packages in 158ms
+ polars==1.40.1
+ polars-runtime-32==1.40.1
コマンド所要時間: 3.01秒
%uv pip の方が約35%短縮されました。uvのフェーズ別所要時間 (Resolved 55ms + Prepared 713ms + Installed 158ms) の合計は約926msで、uv自体の正味処理は1秒未満で完了しています。
検証3: 依存ツリーが深いケース (LangChain系)
これがuvの真価が発揮されるケースです。langgraph、langchain、langchain-community の3つを同時インストールします。これらは依存関係が深く、合計55個のパッケージを解決する必要があります。
%pip install langgraph langchain langchain-community
コマンド所要時間: 10.31秒
%uv pip install langgraph langchain langchain-community
出力:
Using Python 3.12.3 environment at: /local_disk0/...
Resolved 55 packages in 520ms
Downloading langchain-community (2.4MiB)
Downloading sqlalchemy (3.2MiB)
Downloaded sqlalchemy
Downloaded langchain-community
Prepared 18 packages in 251ms
Uninstalled 2 packages in 1ms
Installed 18 packages in 125ms
+ greenlet==3.5.0
+ httpx-sse==0.4.3
+ langchain==1.2.18
+ langchain-classic==1.0.7
+ langchain-community==0.4.1
- langchain-core==1.2.6
+ langchain-core==1.3.3
+ langchain-protocol==0.0.15
+ langchain-text-splitters==1.1.2
+ langgraph==1.1.10
+ langgraph-checkpoint==4.0.3
+ langgraph-prebuilt==1.0.13
...
コマンド所要時間: 3.40秒
約3倍の高速化 です。uvのフェーズ別所要時間に注目すると、
| フェーズ | 所要時間 |
|---|---|
| 55パッケージの依存解決 (Resolved) | 520ms |
| 18パッケージの準備 (Prepared) | 251ms |
| 2パッケージのアンインストール (Uninstalled) | 1ms |
| 18パッケージのインストール (Installed) | 125ms |
| uv正味の処理時間 (合計) | 約897ms |
55パッケージの依存解決を520msで完了 しています。pipではこのフェーズに数秒かかるのが普通であり、依存ツリーが深いほどuvの優位性が顕著になることが分かります。LLMアプリやデータエンジニアリングのプロジェクトのように、多数のライブラリを組み合わせる開発では、毎回数秒〜十秒以上の時間が短縮されることになります。
その他のインストールパターン
ドキュメントで紹介されている %pip のインストールパターンは、すべて %uv pip でも使用できます。%pip を %uv pip に置き換えるだけです。
基本的なサブコマンド
%uv pip は、標準的な pip のサブコマンドをサポートしています。
installuninstalllistshowfreezechecktree
Python wheelパッケージのインストール
%uv pip install /path/to/my_package.whl
バージョン管理システムからのインストール
%uv pip install git+https://github.com/databricks/databricks-cli
requirements ファイルからのインストール
%uv pip install -r /Workspace/shared/prod_requirements.txt
Unity Catalogボリュームからのインストール
%uv pip install /Volumes/<catalog>/<schema>/<path-to-library>/mypackage-0.0.1-py3-none-any.whl
ワークスペースファイルからのインストール
%uv pip install /Workspace/<path-to-whl-file>/mypackage-0.0.1-py3-none-any.whl
プライベートリポジトリからのインストール (シークレット利用)
token = dbutils.secrets.get(scope="scope", key="key")
%uv pip install --index-url https://<user>:$token@<your-package-repository>.com/<path/to/repo> <package>==<version> --extra-index-url https://pypi.org/simple/
%uv pip の制限事項
便利な %uv pip ですが、いくつかの制限事項があります。導入前に把握しておきましょう。
段階的ロールアウト中
冒頭でも触れましたが、%uv pip はサーバレス環境バージョン5以降で利用可能とドキュメントには記載されているものの、実際の有効化は段階的にロールアウトされています。サーバレスv5に切り替えても %uv pip magic is not enabled. が出る場合は、しばらく時間をおいてから再度試してみてください。
プリインストール済みライブラリの完全アンインストール不可
%uv pip uninstall では、サーバレス環境にプリインストール済みのライブラリを完全に削除できません。パッケージのメタデータは削除されますが、基となるファイルはファイルシステム上に残り、引き続きインポート可能な状態となります。
プリインストール済みライブラリとの依存関係競合チェックなし
%uv pip は、プリインストール済みライブラリとの依存関係の競合をチェックしません。インストール時に意図しないバージョン不整合が発生する可能性があるため、特にプロダクション利用前には十分な検証が必要です。
環境サイドパネルの表示上の問題
%uv pip コマンド実行後、ノートブックの 環境 サイドパネルに、プリインストール済みライブラリの一部が「ユーザーインストール済み」と表示される場合があります。これは表示上の問題であり、パッケージの実際の機能には影響しません。
用途の切り分け
%uv pip は、高速な対話型反復処理を目的としたツールとして位置付けられています。再現可能な環境をセットアップしたい場合は、ノートブックの 環境 サイドパネルで依存関係を追加することが推奨されています。
まとめ
Databricksノートブックで %uv pip が使えるようになったことで、特にライブラリの試行錯誤フェーズにおける開発体験が大きく改善されます。
実測値の総まとめは以下の通りです。
| ケース | %pip |
%uv pip |
短縮率 |
|---|---|---|---|
| simplejson (プリインストール済み) | 2.90秒 | 2.31秒 | 約20% |
| polars (約56MBの実ダウンロード) | 4.60秒 | 3.01秒 | 約35% |
| LangChain系3パッケージ (55依存) | 10.31秒 | 3.40秒 | 約67% (3倍速) |
機能面の比較は以下の通りです。
| 観点 | %pip |
%uv pip |
|---|---|---|
| バックエンド | pip | uv (Rust) |
| 依存解決の可視化 | なし |
Resolved / Prepared / Installed のフェーズ別表示 |
| 利用可能環境 | クラシック、サーバレス全般 | サーバレス環境バージョン5以降のみ (段階的ロールアウト中) |
| プリインストール済みライブラリのアンインストール | 制限あり | 不可 (メタデータのみ) |
| 依存関係競合チェック | あり | プリインストール済みに対してはなし |
%pip と %uv pip の体感差は、インストール対象のパッケージサイズや依存ツリーの深さに大きく依存します。LangChainやTransformersのような依存ツリーが深いライブラリを扱う場合、uvの効果は劇的です。一方、プリインストール済みライブラリの再確認では大きな差は出ません。
サーバレスをお使いの方は、まず %pip install を %uv pip install に置き換えて、その違いを体感してみてください。特にLLMアプリ開発やMLパイプラインの試行錯誤フェーズで、日々の開発体験が大きく改善されるはずです。
参考リンク:



