Amazon AirFlow 1.10.12: No module named 'operators'

Всем привет.

Создаю структуру плагинов и дагов для Amazon AirFlow 1.10.12. Делаю согласно документации:

dags:
 - aws_from_redshift_to_s3.py
plugins:
 - __init__.py
 - from_redshift_to_s3_plugin.py
 - operators:
  -- __init__.py
  -- aws_from_redshift_to_s3_operator.py

aws_from_redshift_to_s3_operator.py:

from airflow.hooks.postgres_hook import PostgresHook
from airflow.models import BaseOperator
from airflow.utils.decorators import apply_defaults
from airflow.contrib.hooks.aws_hook import AwsHook


class FromRedshiftToS3TransferOperator(BaseOperator):

from_redshift_to_s3_plugin.py:

from airflow.plugins_manager import AirflowPlugin
from operators.aws_from_redshift_to_s3_operator import FromRedshiftToS3TransferOperator


class FromRedShiftToS3Plugin(AirflowPlugin):
    name = 'from_redshift_to_s3_plugin'
    operators = [FromRedshiftToS3TransferOperator]

В самом ДАГе подключаю так:

from operators.from_redshift_to_s3_plugin import FromRedshiftToS3TransferOperator

При попытке активировать ДАГ в Amazon AirFlow 1.10.12 получаю ошибку: No module named 'operators'


Ответы (1 шт):

Автор решения: asanisimov

Возможно в AWS есть какой то параметр, лень читать всю доку) Но Вам необходимо проверить подтягиваются ли плагины в /usr/local/airflow/plugins/* , именно от туда он их будет подгружать, судя по беглому просмотру. Дальше уже действовать в зависимости от того есть они там или нет. А вообще, если говорить о стандартном размещение airflow - все модули подтягиваются (без дополнительных настроек) из dags/ , именно внутри него ( и относительно него) надо строить все импорты.

Вот пример вызова кастомного оператора в dag_use_castom_operator.py:

from plugins.operators import MyCastomOperator
from plugins.sensors import MyCastomSensor

вот дерево директорий:

dags/
   dag_use_castom_operator.py
 - plugins/
     __init__.py
   - hooks/
   - operators/
     __init__.py
     MyCastomOperator.py
   - sensors/
     __init__.py
     MyCastomSensor.py

Для удобства в IDE нужно настроить sorce_folders(Если IDE - PyCharm) на директорию dags что бы при разработке правильно импортировались модули.

→ Ссылка