メインコンテンツまでスキップ

Databricks アプリの依存関係を管理する

Databricks アプリは、Python の依存関係、Node.js の依存関係、またはその両方を含めることができます。アプリをデプロイする際に Databricks がインストールする、言語固有のファイルで依存関係を宣言します。

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.tomluv.lockの両方が存在する場合、アプリはuvを使用してロックファイルから依存関係をインストールします。

uvインストーラーは独自の仮想環境を作成および管理するため、 .venvディレクトリを作成する必要はありません。

以下の例は、Databricksアプリの最小限のpyproject.tomlを示しています。

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.yamlpackage-lock.jsonの両方が存在する場合、pnpmが優先されます。

たとえば、Vite を使用する React アプリの package.json ファイルは次のようになります。

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 は pnpmCorepack を通じて提供します。

pnpmアプリの次の要件に注意してください。

  • 依存関係はpnpm install --frozen-lockfileでインストールされるため、pnpm-lock.yamlpackage.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.txtpyproject.toml、およびpackage.jsonで定義されているライブラリを、専用のコンピュートで実行されているコンテナに直接インストールします。これらの依存関係を管理し、パッチを適用する責任があります。

依存関係ファイルでは複数のソースからのライブラリを指定できます。

  • PyPIやnpmなどのパブリックリポジトリからダウンロードしたライブラリ
  • Databricks シークレットに保存された資格情報を使用して認証するプライベート リポジトリ
  • /Volumes/ディレクトリに保存されているライブラリ (例: /Volumes/<catalog>/<schema>/<volume>/<path> )

プライベートリポジトリからインストールする

プライベート リポジトリからパッケージをインストールするには、認証用の環境変数を設定します。たとえば、 PIP_INDEX_URLプライベート リポジトリを指すように設定します。

YAML
env:
- name: PIP_INDEX_URL
valueFrom: my-pypi-secret

ワークスペースのネットワーク構成で、プライベート リポジトリへのアクセスを許可する必要があります。Databricks Appsのネットワークの構成を参照してください。

Unity Catalogボリュームからホイールファイルをインストールする

Unity Catalogボリュームに保存されている wheel ファイルからPythonパッケージをインストールするには:

  1. Unity Catalogボリュームをリソースとしてアプリに追加します。 Unity Catalogボリュームを参照してください。
  2. requirements.txtでホイール ファイルの完全なパスを直接参照します。
/Volumes/<catalog>/<schema>/<volume>/my_package-1.0.0-py3-none-any.whl
注記

requirements.txtでは、環境変数参照はサポートされていません。完全な Wheel ファイルパスをハードコードする必要があります。

外部パッケージ リポジトリにアクセスする際のセキュリティを強化するには、サーバレス出力制御を使用してパブリック リポジトリへのアクセスを制限し、プライベート ネットワークを構成します。 「Databricks アプリのネットワークの構成」を参照してください。