Databricks アプリの依存関係を管理する
各 Databricks アプリには、Python、Node.js、またはその両方の依存関係を含めることができます。これらの依存関係は、言語固有のファイルで定義します。
requirements.txtファイルを使用して、pipでインストールされた Python パッケージを指定します。Pythonの依存関係を定義する方法については、pipを参照してください。pyproject.tomlファイルを使用して、uvでインストールされた Python パッケージを指定します。Pythonの依存関係を定義する方法については、uvを参照してください。- Node.js パッケージを指定するには、
package.jsonファイルを使用します。Node.jsの依存関係を定義するを参照してください。
Pythonの依存関係を定義する pip
pipを使用するアプリには、プリインストールされた Python ライブラリのセットが付属しています。追加のPythonライブラリを定義するには、 requirements.txtファイルを使用します。 リストされているパッケージの中に、既にインストールされているものと一致するものがある場合、ファイル内のバージョンがデフォルト設定を上書きします。
例えば:
# Override default version of dash
dash==2.10.0
# Add additional libraries not pre-installed
requests==2.31.0
numpy==1.24.3
# Specify a compatible version range
scikit-learn>=1.2.0,<1.3.0
プリインストール済み Python ライブラリ
pipベースのアプリには、以下の Python ライブラリがプリインストールされています。別のバージョンが必要な場合を除き、 requirements.txtにそれらを含める必要はありません。
ライブラリ | バージョン |
|---|---|
Databricks の SQL コネクタ | 3.4.0 |
databricks-sdk | 0.33.0 |
mlflow-skinny | 2.16.2 |
gradio | 4.44.0 |
streamlit | 1.38.0 |
shiny | 1.1.0 |
dash | 2.18.1 |
flask | 3.0.3 |
fastapi | 0.115.0 |
uvicorn[standard] | 0.30.6 |
gunicorn | 23.0.0 |
ハグフェイスハブ | 0.35.3 |
dash-ag-grid | 31.2.0 |
dash-mantine-components | 0.14.4 |
dash-bootstrap-components | 1.6.0 |
Plotly | 5.24.1 |
plotly-resampler | 0.10.0 |
Pythonの依存関係を定義する uv
アプリが依存関係管理にuvを使用している場合は、Python の依存関係をrequirements.txtではなくpyproject.tomlファイルで定義してください。uvベースのアプリでは、プリインストールされたライブラリは利用できません。pyproject.tomlですべての依存関係を宣言する必要があります。requires-pythonフィールドを使用すると、任意の Python バージョンを指定できます。これは、Python 3.11 を使用するpipベースのアプリとは異なります。
デプロイ時に、Databricks Appsは存在するファイルに基づいてインストール戦略を選択します。
requirements.txt存在する場合、pyproject.tomlが存在するかどうかに関わらず、アプリはpipを使用して依存関係をインストールします。requirements.txt常に優先されます。requirements.txt存在せず、pyproject.tomlとuv.lockの両方が存在する場合、アプリはuvを使用してロックファイルから依存関係をインストールします。
uvインストーラーは独自の仮想環境を作成および管理するため、 .venvディレクトリを作成する必要はありません。
以下の例は、Databricksアプリの最小限のpyproject.tomlを示しています。
[project]
name = "my-app"
requires-python = ">=3.11"
dependencies = [
"dash==2.10.0",
"requests==2.31.0",
]
uvを使用するには、 pyproject.tomlと一緒にuv.lockファイルを含める必要があります。ローカルでuv lock実行して生成し、アプリディレクトリに含めてください。
Node.js依存関係を定義する
ライブラリを定義するには Node.js アプリのルートに package.json ファイルを含めます。 デプロイ中に、Databricks はこのファイルを検出し、 npm install を実行して、そのファイルにリストされているすべての依存関係をインストールします。
たとえば、Vite を使用する React アプリの package.json ファイルは次のようになります。
{
"name": "react-fastapi-app",
"version": "1.0.0",
"private": true,
"type": "module",
"scripts": {
"build": "npm run build:frontend",
"build:frontend": "vite build frontend"
},
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"typescript": "^5.0.0",
"vite": "^5.0.0",
"@vitejs/plugin-react": "^4.2.0",
"@types/react": "^18.2.0",
"@types/react-dom": "^18.2.0"
}
}
devDependenciesではなく、dependencies未満のnpm run buildに必要なすべてのパッケージをリストします。環境変数で NODE_ENV=production を設定すると、デプロイメント・プロセスは devDependenciesのインストールをスキップします。
バージョンの競合を回避
依存関係を定義する際には、以下の点に注意してください。
pipベースのアプリの場合、指定したバージョンがプリインストールされているバージョンと大きく異なると、プリインストールされているパッケージを上書きすると互換性の問題が発生する可能性があります。- 常にアプリをテストして、パッケージ バージョンの変更によってエラーが発生しないことを確認します。
requirements.txtで明示的なバージョンをピン留めすると、デプロイ間で一貫したアプリの動作を維持できます。uvを使用する場合は、デプロイメント間で完全に再現可能なインストールを実現するために、uv.lockファイルを含めてください。
依存関係のインストールと管理
requirements.txt 、 pyproject.toml 、およびpackage.jsonで定義されたライブラリは、専用のコンピュートで実行されるコンテナに直接インストールされます。 これらの依存関係の管理とパッチ適用は、あなたの責任です。
依存関係ファイルでは複数のソースからのライブラリを指定できます。
- PyPIやnpmなどのパブリックリポジトリからダウンロードしたライブラリ
- Databricks シークレットに保存された資格情報を使用して認証するプライベート リポジトリ
/Volumes/ディレクトリに保存されているライブラリ (例:/Volumes/<catalog>/<schema>/<volume>/<path>)
プライベートリポジトリからインストールする
プライベート リポジトリからパッケージをインストールするには、認証用の環境変数を設定します。たとえば、 PIP_INDEX_URLプライベート リポジトリを指すように設定します。
env:
- name: PIP_INDEX_URL
valueFrom: my-pypi-secret
ワークスペースのネットワーク構成で、プライベート リポジトリへのアクセスを許可する必要があります。「Databricks アプリのネットワークの構成」を参照してください。
Unity Catalogボリュームからホイールファイルをインストールする
Unity Catalogボリュームに保存されている wheel ファイルからPythonパッケージをインストールするには:
- Unity Catalogボリュームをリソースとしてアプリに追加します。 Unity Catalogボリュームを参照してください。
requirements.txtでホイール ファイルの完全なパスを直接参照します。
/Volumes/<catalog>/<schema>/<volume>/my_package-1.0.0-py3-none-any.whl
環境変数参照はrequirements.txtではサポートされていません。完全なホイール ファイルのパスをハードコードする必要があります。
外部パッケージ リポジトリにアクセスする際のセキュリティを強化するには、サーバレス出力制御を使用してパブリック リポジトリへのアクセスを制限し、プライベート ネットワークを構成します。 「Databricks アプリのネットワークの構成」を参照してください。