Перейти к содержанию

Подключение дополнительных Python библиотек

Возможность самостоятельного подключения дополнительных Python библиотек в AW BI реализована, начиная с версии 1.34.

Схема подключения дополнительных Python библиотек:

  1. Администратор в переменных .env-файла указывает:

    • какие внешние библиотеки необходимо установить в контейнеры etl-data-preview и etl-airflow (переменная ETL_EXTRA_PYLIBS_INSTALL);
    • какие модули разрешены для импорта в etl-скриптах и etl-блоках (переменная ETL_EXTRA_PYLIBS_ALLOW).
  2. При перезагрузке AW BI (docker-compose up -d --) указанные библиотеки автоматически устанавливаются в etl-контейнеры;

  3. Администратор проверяет успешность настройки, запуская показ логов одного из контейнеров: etl-data-preview или etl-airflow (docker compose logs etl-data-preview). В самом начале лога должны быть отметки об успешной установке библиотек.

В этой схеме, дополнительные библиотеки перед установкой скачиваются из внешнего pypi-репозитория. При отстутствии интернета (например, при развертывании AW BI в закрытом контуре), схема подключения выглядит чуть сложнее.

Переменные окружения

Переменная Описание
ETL_EXTRA_PYLIBS_INSTALL Перечисление библиотек, которые необходимо дополнительно установить в etl-контейнеры. Библиотеки указываются в формате pip-пакетов.
ETL_EXTRA_PYLIBS_ALLOW Перечисление пакетов, импорт которых разрешен в etl-скриптах. Список указывается через пробел или запятую
ETL_EXTRA_PYBUILTINS_ALLOW Перечисление стандартных функций, использование которых разрешено в etl-скриптах
ETL_EXTRA_PYWHEELS Путь к хостовой папке, в которой располагаются заранее скачанные whl-пакеты для устанавливаемых библиотек

ETL_EXTRA_PYLIBS_INSTALL

В этой переменной указывается "источник", откуда система будет брать пакеты для установки дополнительных библиотек. Для этого есть несколько вариантов.

1. Установка из стандартного pypi-репозитория

# последние версии библиотек
ETL_EXTRA_PYLIBS_INSTALL=beautifulsoup4 clickhouse_parser  

# конкретные версии библиотек
ETL_EXTRA_PYLIBS_INSTALL=beautifulsoup4==4.13.3 clickhouse-driver==0.2.9

# указанные минимальные и (или) максимальные версии
ETL_EXTRA_PYLIBS_INSTALL=beautifulsoup4>=4.12 clickhouse_driver<=0.2.9 pandas-gbq>=0.23,<0.24

2. Установка из стороннего pypi-репозитория

ETL_EXTRA_PYLIBS_INSTALL=torchvision==0.21.0+cpu --index-url https://download.pytorch.org/whl/cpu

3. Установка из внешнего git-репозитория

ETL_EXTRA_PYLIBS_INSTALL=git+https://github.com/mymarilyn/clickhouse-driver@master#egg=clickhouse-driver

4. Установка wheel-пакетов из локальной папки. Предварительно, нужно прописать путь к папке с whl-файлами в переменной ETL_EXTRA_PYWHEELS и пересоздать контейнеры AW BI.

ETL_EXTRA_PYWHEELS=/opt/aw/my_python_libs  # путь к любой папке на хосте

ETL_EXTRA_PYLIBS_INSTALL=/app/extra_pywheels/*

ETL_EXTRA_PYLIBS_ALLOW

В этой переменной задаются пакеты, импорт которых разрешен в etl-скриптах и etl-блоках. Список пакетов указывается через пробел или запятую.

ETL_EXTRA_PYLIBS_INSTALL=bs4 clickhouse_driver

ETL_EXTRA_PYBUILTINS_ALLOW

В стандартной библиотеки языка Python есть некоторое количество встроенных (builtins) функций , из которых не все разрешены к использованию в etl-скриптах.

Дополнительно разрешенные имена функций перечисляются в переменной ETL_EXTRA_PYBUILTINS_ALLOW через пробел или запятую.

Примеры:

# .env файл

ETL_EXTRA_PYBUILTINS_ALLOW=open,exec,eval

ETL_EXTRA_PYBUILTINS_ALLOW=open exec eval

ETL_EXTRA_PYWHEELS

Здесь Путь к локальной папке на хосте с docker-контейнерами AW BI, в которой располагаются готовые к установке whl-файлы дополнительных библиотек.

Если значение переменной указано, что эта папка будет подключена внутрь etl-контейнеров AW BI по пути /app/extra_pywheels. Для установки библиотек из данного расположения необходимо указать ETL_EXTRA_PYLIBS_INSTALL=/app/extra_pywheels/*.

Если нет доступа в интернет

Скачивание пакетов

При отсутствии доступа в интернет (например, в закрытых контурах), whl-пакеты устанавливаемых библиотек необходимо скачать заранее. Для этого есть несколько вариантов.

1. Если есть образ etl-mono нужной версии AW BI или доступ к registry.analyticworkspace.ru

# Пример скачивания whl-пакетов в папку /opt/aw/my_python_libs 
# (можно указать путь к любой хостовой папке)

# Замените тег (:1.34) у образа etl-mono на нужную вам версию

docker run -it --rm \
    -v /opt/aw/my_python_libs:/app/extra_pywheels \
    registry.analyticworkspace.ru/aw/etl-mono:1.34 export-wheels \
    "beautifulsoup4 clickhouse_driver"

2. У вас есть доступ к стенду, на котором установлена AW BI нужной вам версии и есть доступ в интернет (обычно, это какой-то stage/pre-release сервер).

Установите значение переменной ETL_EXTRA_PYWHEELS. Здесь указывается любая хостовая папка, в которую будут скачаны whl-пакеты библиотек:

# файл .env

ETL_EXTRA_PYWHEELS=/opt/aw/my_python_libs

Запустите скачивание пакетов:

docker compose run -it --rm \
    etl-data-preview export-wheels \
    "beautifulsoup4 clickhouse_driver"

3. Если вы точно уверены, что нужная вам библиотека не требует различных сборок для разных платформ, операционных системы и версий python, то вы можете скачать whl-пакеты с помощью обычного pip.

pip wheel --wheel-dir /opt/aw/my_python_libs beautifulsoup4 clickhouse_driver

Настройка AW BI

Скопируйте скачанные whl-файлы на стенд, у которого нет доступа в интернет, в любую хостовую папку (например, в /opt/aw/extra_pywheels).

Установите значения паременных:

ETL_EXTRA_PYWHEELS=/opt/aw/my_python_libs  # путь к папке, в которую вы скопировали whl-пакеты

ETL_EXTRA_PYLIBS_INSTALL=/app/extra_pywheels/*

Перезагрузите AW BI:

docker compose down && docker compose up -d

Убедитесь, что библиотеки были установлены корректно. В самом начале лога контейнеров etl-data-preview и etl-airflow будут отметки об этом:

# Пример лога с успешно установленными библиотеками

user@myserver:/opt/aw/app$ docker compose logs etl-data-preview

etl-data-preview-1  | Collecting beautifulsoup4
etl-data-preview-1  |   Downloading beautifulsoup4-4.12.3-py3-none-any.whl.metadata (3.8 kB)
etl-data-preview-1  | Collecting clickhouse_driver
etl-data-preview-1  |   Downloading clickhouse_driver-0.2.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.1 kB)
etl-data-preview-1  | Collecting soupsieve>1.2 (from beautifulsoup4)
etl-data-preview-1  |   Downloading soupsieve-2.5-py3-none-any.whl.metadata (4.7 kB)
etl-data-preview-1  | Requirement already satisfied: pytz in /usr/local/lib/python3.12/site-packages (from clickhouse_driver) (2024.1)
etl-data-preview-1  | Collecting tzlocal (from clickhouse_driver)
etl-data-preview-1  |   Downloading tzlocal-5.2-py3-none-any.whl.metadata (7.8 kB)
etl-data-preview-1  | Downloading beautifulsoup4-4.12.3-py3-none-any.whl (147 kB)
etl-data-preview-1  | Downloading clickhouse_driver-0.2.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB)
etl-data-preview-1  |    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 4.1 MB/s eta 0:00:00
etl-data-preview-1  | Downloading soupsieve-2.5-py3-none-any.whl (36 kB)
etl-data-preview-1  | Downloading tzlocal-5.2-py3-none-any.whl (17 kB)
etl-data-preview-1  | Installing collected packages: tzlocal, soupsieve, clickhouse_driver, beautifulsoup4
etl-data-preview-1  | Successfully installed beautifulsoup4-4.12.3 clickhouse_driver-0.2.9 soupsieve-2.5 tzlocal-5.2
...