Управление зависимостями для приложения Databricks

Приложение Databricks может включать Python зависимости, Node.js зависимости или оба. Вы объявляете зависимости в файлах, специфичных для языка, которые Azure Databricks устанавливает при развертывании приложения:

Определение зависимостей Python с помощью pip

Приложения, которые используют pip, поставляются с набором предварительно установленных библиотек Python. Чтобы определить дополнительные библиотеки Python, используйте requirements.txt файл. Если какие-либо из перечисленных пакетов соответствуют предварительно установленным, то версии в вашем файле переопределят значения по умолчанию.

Горизонтально масштабируемые приложения (бета-версия), преобразованные из стандартных приложений, могут отказаться от предварительно установленных библиотек и запускаться на чистом базовом образе ОС. См. Отказ от предварительно установленных библиотек Python для приложений Databricks.

Рассмотрим пример.

# 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-connector (коннектор SQL для платформы Databricks) 3.4.0
databricks-sdk 0.33.0
mlflow-skinny 2.16.2
gradio 4.44.0
streamlit 1.38.0
блестящий 1.1.0
тире 2.18.1
колба 3.0.3
fastapi 0.115.0
uvicorn[standard] 0.30.6
гуникорн 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
график-resampler 0.10.0

Определение зависимостей Python с помощью uv

Если ваше приложение использует uv для управления зависимостями, задайте зависимости Python в файле pyproject.toml, вместо requirements.txt. Приложения на базе uv не содержат предустановленных библиотек, поэтому необходимо указать все зависимости в файле pyproject.toml. Можно также указать любую версию Python с помощью поля requires-python, в отличие от приложений на основе pip, которые используют Python 3.11.

Это же относится к приложениям горизонтального масштабирования, которые отказались от предварительно установленных библиотек. См. Отказ от предварительно установленных библиотек Python для приложений Databricks.

Во время развертывания Databricks Apps выбирает стратегию установки в зависимости от того, какие файлы присутствуют:

  • Если requirements.txt существует, приложение использует pip для установки зависимостей, независимо от наличия pyproject.toml. requirements.txt всегда имеет приоритет.
  • Если requirements.txt не существует, а pyproject.toml и uv.lock существуют, приложение использует uv для установки зависимостей из файла блокировки.

Установщик uv создает и управляет собственной виртуальной .venv средой, поэтому вам не нужно создавать каталог.

В следующем примере показано минимальное значение pyproject.toml для приложения Databricks:

[project]
name = "my-app"
requires-python = ">=3.11"
dependencies = [
    "dash==2.10.0",
    "requests==2.31.0",
]

Чтобы использовать uv, необходимо включить файл uv.lock в комплект с вашим pyproject.toml. Создайте его, запустив uv lock локально и включив его в каталог приложения.

Определение зависимостей Node.js

Чтобы определить библиотеки Node.js, добавьте package.json файл в корневой каталог приложения. Azure Databricks поддерживает как npm, так и pnpm, и выбирает диспетчер пакетов в зависимости от включённого файла блокировки:

  • Если pnpm-lock.yaml присутствует, приложение использует pnpm. См. раздел "Использование pnpm".
  • В противном случае приложение использует npm.
  • Если оба pnpm-lock.yaml и package-lock.json присутствуют, pnpm имеет приоритет.

Например, package.json файл для приложения React с помощью Vite может выглядеть следующим образом:

{
  "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"
  }
}

Замечание

Перечислите все пакеты, необходимые для этапа сборки, в разделе dependencies, а не devDependencies. Если вы установите NODE_ENV=production в переменных среды, процесс развертывания пропустит установку devDependencies.

Использовать pnpm

Чтобы выполнить сборку с pnpm, необходимо включить файл pnpm-lock.yaml рядом с вашим package.json. Создайте его, запустив pnpm install локально и включив его в каталог приложения. Azure Databricks предоставляет pnpm через Corepack.

Обратите внимание на следующие требования для pnpm приложений:

  • Зависимости устанавливаются с помощью pnpm install --frozen-lockfile, поэтому pnpm-lock.yaml должен оставаться синхронизированным с package.json. Если возникают расхождения, сборка завершается с ошибкой вместо того, чтобы обновить файл блокировки. После изменения зависимостей заново создайте файл блокировки с помощью pnpm install.
  • Необходимо указать команду запуска в app.yaml. В отличие от npm приложений, pnpm приложения не возвращаются к скрипту по умолчанию start . См . раздел "Настройка выполнения приложения Databricks с помощью app.yaml".

Для проектов в рабочей области pnpm (в которых присутствует файл pnpm-workspace.yaml) некоторые команды app.yaml рекурсивно запускают pnpm. Например, этап сборки или запуска может запускать pnpm -r run build. Эти команды должны вызывать corepack pnpm вместо pnpm, чтобы вложенные команды корректно разрешались.

Избегайте конфликтов версий

Чтобы избежать конфликтов версий, следуйте приведенным ниже рекомендациям.

  • Для приложений на основе pip, переопределение предварительно установленных пакетов может привести к проблемам совместимости, если указанная версия значительно отличается от предварительно установленной.
  • Всегда тестируйте приложение, чтобы убедиться, что изменения версии пакета не содержат ошибок.
  • Фиксирование явных версий в requirements.txt помогает обеспечивать согласованное поведение приложений во всех развертываниях.
  • При использовании uv необходимо добавить файл uv.lock, чтобы обеспечить полностью воспроизводимые установки в различных контекстах развертывания.

Установка зависимостей и управление ими

Azure Databricks устанавливает библиотеки, определенные в requirements.txt, pyproject.tomlи package.json непосредственно в контейнере, работающем на выделенном вычислительном ресурсе. Вы несете ответственность за управление и исправление этих зависимостей.

Библиотеки можно указать из нескольких источников в файлах зависимостей:

  • Библиотеки, скачанные из общедоступных репозиториев, таких как PyPI и npm
  • Частные репозитории, аутентифицирующиеся с использованием учетных данных, хранящихся в секретах Azure Databricks
  • Библиотеки, хранящиеся в каталоге /Volumes/ (например, /Volumes/<catalog>/<schema>/<volume>/<path>)

Установка из частных репозиториев

Чтобы установить пакеты из частного репозитория, настройте переменные среды для проверки подлинности. Например, задайте PIP_INDEX_URL для указания на частный репозиторий:

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

Конфигурация сети рабочей области должна разрешить доступ к частному репозиторию. См . статью "Настройка сети для приложений Databricks".

Использование репозиториев пакетов по умолчанию на уровне рабочей области

Это важно

Эта функция доступна в бета-версии. Чтобы использовать его, администратор рабочей области должен включить настройку репозитория рабочей области для приложений Databricks на странице "Предварительные версии ". См. статью "Управление предварительными версиями Azure Databricks".

Если администратор рабочей области настраивает репозитории пакетов по умолчанию для рабочей области, приложения в этой рабочей области устанавливают Python и Node.js пакеты из репозиториев, настроенных для рабочей области, вместо общедоступных реестров PyPI и npm. Это позволяет разработчикам приложений автоматически наследовать настройки корпоративного репозитория пакетов без дублирования конфигурации в каждом приложении, при этом сохраняя возможность переопределения настроек для отдельных приложений.

Сведения о настройке этих параметров уровня рабочей области см. в разделе "Настройка репозиториев пакетов по умолчанию".

пакеты Python

На этапе установки пакета Databricks Apps наследует параметры рабочей области для следующих переменных среды:

  • PIP_INDEX_URL
  • PIP_EXTRA_INDEX_URL
  • PIP_CERT
  • UV_INDEX_URL
  • UV_EXTRA_INDEX_URL
  • SSL_CERT_FILE

Конфигурация для конкретного приложения имеет приоритет над значениями по умолчанию рабочей области. Если в файле app.yaml вашего приложения заданы какие-либо из предыдущих переменных среды (кроме параметров сертификата, указанных ниже), значения в app.yaml переопределяют параметры рабочей области для этого приложения.

Замечание

Параметры сертификатов PIP_CERT и SSL_CERT_FILE всегда используют значения, заданные для рабочей области, и их нельзя переопределить в app.yaml.

Предупреждение

Протестируйте свои приложения после того, как администратор рабочего пространства включит режим предварительного просмотра, и задайте PIP_INDEX_URL в app.yaml, если нужно продолжать установку из другого индекса.

пакеты Node.js

Когда администратор рабочей области настраивает реестр npm по умолчанию, Databricks Apps записывает конфигурацию реестра рабочих областей в файл приложения .npmrc во время развертывания. Это позволяет приложениям устанавливать пакеты Node.js, включая частные пакеты, из реестра, настроенного в рабочей области, без каждого приложения, сохраняющего собственный URL-адрес реестра или маркер проверки подлинности.

Чтобы использовать другой реестр для конкретного приложения, задайте NPMRC переменную среды в файле приложения app.yaml , чтобы ссылаться на собственную конфигурацию npm. Конфигурация для конкретного приложения имеет приоритет над значениями по умолчанию рабочей области.

Установка файлов колес из томов каталога Unity

Чтобы установить пакеты Python из wheel-файлов, хранящихся в репозиториях каталога Unity, выполните следующие действия.

  1. Добавьте том каталога Unity в качестве ресурса в приложение. См . том каталога Unity.
  2. Ссылка на полный путь к файлу колесика непосредственно в вашей requirements.txt:
/Volumes/<catalog>/<schema>/<volume>/my_package-1.0.0-py3-none-any.whl

Замечание

Ссылки на переменные среды не поддерживаются в requirements.txt. Необходимо жестко закодить полный путь к файлу колесика.

Чтобы повысить безопасность при доступе к внешним репозиториям пакетов, используйте бессерверные элементы управления исходящего трафика, чтобы ограничить доступ к общедоступным репозиториям и настроить частные сети. См . статью "Настройка сети для приложений Databricks".