Импорт локального модуля (сценарий python) в Airflow DAG - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь импортировать локальный модуль (скрипт на python) в мою DAG.

Структура каталогов:

airflow/
├── dag
│   ├── __init__.py
│   └── my_DAG.py
└── script
    └── subfolder
        ├── __init__.py
        └── local_module.py

Пример кода в my_DAG.py:

#trying to import from local module
from script.subfolder import local_module  

#calling a function in local_module.py  
a = some_function()  

Я получаю сообщение об ошибке в Airflow: «Broken DAG: my_DAG. Нет модуля с именем local_module.

Я обновил Airflow до 1.9.0, но это не решает проблему.

  • Какое здесь решение?
  • Я также где-то читал, что могу решить эту проблему, создав плагин. Кто-нибудь может указать, как я могу это сделать?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 23 августа 2018

Вам необходимо добавить еще один файл __init__.py в каталог script, на том же уровне, что и subfolder.

airflow/  
    |_ dag/  
    |    |_ __init__.py  
    |    |_ my_DAG.py  
    |_ script/
         |_ __init__.py          <----- This here
         |_  subfolder/  
              |_  __init__.py  
              |_  local_module.py  
0 голосов
/ 23 августа 2018

Я делаю это следующим образом:

  1. создайте скрипт Python в вашей подпапке с помощью функции main ().
  2. в вашем файле dag включает объявление пути для подпапки и файла

Теперь вы можете использовать этот скрипт в вашем PythonOperator

import sys
sys.path.insert(0,"/root/airflow/dags/subfolder"))
import subfolder.script_name as script
...    
t1=PythonOperator(
    task_id='python_script',
    python_callable=script.main,
    dag=dag
)
0 голосов
/ 03 мая 2018

Обычно это связано с настройкой воздушного потока.

В airflow.cfg убедитесь, что в airflow_home указан правильный путь к каталогу структуры воздушного потока.

Затем Airflow сканирует все подпапки и заполняет их, чтобы найти модули.

В противном случае, просто убедитесь, что папка, которую вы пытаетесь импортировать, находится в пути Python: Как использовать PYTHONPATH

...