Воздушный поток в облаке Composer Невозможно импортировать модуль - PullRequest
1 голос
/ 06 мая 2020

Я использую группу DAG test_dag.py, которая структурирована в моем сегменте облачного хранилища Google следующим образом.

gcs-bucket/
    dags/
        test_dag.py
        dependencies/
            __init__.py
            dependency_1.py
            module1/
                __init__.py
                dependency_2.py

Airflow обнаруживает DAG, test_dag.py, который пытается импортировать из depencies/dependency_1.py (успешно импортируется) и dependencies/module1/dependency_2.py, что дает ошибку Broken DAG: [/home/airflow/gcs/dags/test_dag.py] module 'dependencies' has no attribute 'module1'.

Строка, вызывающая это: from dependencies.module1 import dependency_2.

Это, кажется, указывает мне, что Cloud Composer не может импортировать из подкаталога в dependencies/, и когда я смотрю на их документация по зависимостям здесь , пример , который они дают, находится всего на один уровень каталога ниже /dags (и представляет собой только 1 файл, а не полный пакет python).

Но вот что странно - он работает успешно, когда я запускаю его локально в Airflow (не в Cloud Composer). Поэтому я не понимаю, почему мой импорт будет работать локально, но не в облаке Composer.

Я также пробовал импортировать все из моих файлов __init__.py, что дает мне ту же ошибку атрибута и переместив свои зависимости на уровень gcs-bucket/, где их вообще невозможно найти.

Когда я распечатываю __file__ из своего DAG, я получаю /home/airflow/gcs/dags/test_dag.py, и когда я печатаю sys.path Я получаю:

['/usr/local/bin', '/opt/python3.6/lib/python36.zip', '/opt/python3.6/lib/python3.6', '/opt/python3.6/lib/python3.6/lib-dynload', '/opt/python3.6/lib/python3.6/site-packages', '/usr/local/lib/airflow', '/home/airflow/gcs/dags', '/etc/airflow/config', '/home/airflow/gcs/plugins']

Я совершенно в растерянности, любая помощь будет очень признательна. Спасибо.

РЕДАКТИРОВАТЬ: Кажется, что Cloud Composer не любит, когда зависимости пытаются импортировать другие зависимости (см. Комментарии ниже). Хотите знать, есть ли способ обойти это?

1 Ответ

0 голосов
/ 23 мая 2020

Не могли бы вы добавить __init__.py в папку dags/ и попробовать?

...