Databricks アプリの依存関係を管理する
Databricks アプリは、Python の依存関係、Node.js の依存関係、またはその両方を含めることができます。アプリをデプロイする際に Databricks がインストールする、言語固有のファイルで依存関係を宣言します。
requirements.txtでインストールされた**Python**パッケージには、pipファイルを使用します。「pipによるPythonの依存関係の定義」を参照してください。pyproject.tomlでインストールされた**Python**パッケージには、uvファイルを使用します。「uvによるPythonの依存関係の定義」を参照してください。package.jsonファイルを使用して、npmまたはpnpmでインストールされた Node.js パッケージを指定します。Node.jsの依存関係を定義するを参照してください。
Pythonの依存関係を定義する pip
pipを使用するアプリには、プリインストールされた Python ライブラリのセットが付属しています。追加のPythonライブラリを定義するには、 requirements.txtファイルを使用します。 リストされているパッケージの中に、既にインストールされているものと一致するものがある場合、ファイル内のバージョンがデフォルト設定を上書きします。
標準アプリから変換された水平スケーリングされたアプリ (ベータ) は、プリインストールされたライブラリを使用しないことを選択し、代わりにクリーンなベース OS イメージで実行できます。「DatabricksアプリのプリインストールされたPythonライブラリのオプトアウト」を参照してください。
例えば:
# 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 |
huggingface-hub | 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を使用している場合は、requirements.txtではなくpyproject.tomlファイルでPythonの依存関係を定義します。uvベースのアプリにはプリインストールされたライブラリは含まれていませんので、pyproject.tomlですべての依存関係を宣言する必要があります。Python 3.11 を使用するpipベースのアプリとは異なり、requires-pythonフィールドを使用して任意のPythonバージョンを指定することもできます。
同様に、プリインストールされたライブラリを無効にした水平スケーリングされたアプリにも適用されます。「Databricks アプリ用のプリインストールされた Python ライブラリをオプトアウトする」を参照してください。
デプロイ時に、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 は [1]npm と [2]pnpm の両方をサポートし、含めるロックファイルに基づいてパッケージマネージャーを選択します。
pnpm-lock.yamlが存在する場合、アプリはpnpmを使用します。pnpmを使用するを参照してください。- それ以外の場合は、アプリは
npmを使用します。 pnpm-lock.yamlとpackage-lock.jsonの両方が存在する場合、pnpmが優先されます。
たとえば、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 の下に一覧表示します。環境変数に NODE_ENV=production を設定すると、デプロイメントプロセスは devDependencies のインストールをスキップします。
使用 pnpm
pnpmを使用してビルドするには、package.jsonと共にpnpm-lock.yamlファイルを含めます。pnpm install をローカルで実行して生成し、アプリ ディレクトリに含めます。Databricks は pnpm を Corepack を通じて提供します。
pnpmアプリの次の要件に注意してください。
- 依存関係は
pnpm install --frozen-lockfileでインストールされるため、pnpm-lock.yamlはpackage.jsonと同期している必要があります。ドリフトが発生した場合、ロックファイルは更新されず、ビルドが失敗します。依存関係を変更した後、pnpm installでロックファイルを再生成します。 app.yamlで開始コマンドを指定する必要があります。npmアプリとは異なり、pnpmアプリはデフォルトのstartスクリプトにフォールバックしません。app.yamlを使用した Databricks アプリの実行の構成を参照してください。
pnpm のワークスペースプロジェクト (pnpm-workspace.yaml ファイルが存在する場合)、一部の app.yaml コマンドは pnpm を再帰的に実行します。たとえば、ビルドまたは開始ステップがpnpm -r run buildを実行する可能性があります。これらのコマンドは、ネストされたコマンドが正しく解決されるように、pnpm の代わりに corepack pnpm を呼び出す必要があります。
バージョンの競合を回避
バージョン競合を回避するには、次のガイドラインに従ってください:
pipベースのアプリの場合、指定したバージョンがプリインストールされているバージョンと大きく異なると、プリインストールされているパッケージを上書きすると互換性の問題が発生する可能性があります。- 必ずアプリケーションをテストし、パッケージバージョンの変更によってエラーが発生しないことを確認してください。
requirements.txtで明示的なバージョンをピン留めすると、デプロイ間で一貫したアプリの動作を維持できます。uvを使用する場合は、デプロイメント間で完全に再現可能なインストールを実現するために、uv.lockファイルを含めてください。
依存関係のインストールと管理
Databricks は、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 Appsのネットワークの構成を参照してください。
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では、環境変数参照はサポートされていません。完全な Wheel ファイルパスをハードコードする必要があります。
外部パッケージ リポジトリにアクセスする際のセキュリティを強化するには、サーバレス出力制御を使用してパブリック リポジトリへのアクセスを制限し、プライベート ネットワークを構成します。 「Databricks アプリのネットワークの構成」を参照してください。