Я использую группу 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 не любит, когда зависимости пытаются импортировать другие зависимости (см. Комментарии ниже). Хотите знать, есть ли способ обойти это?