Cloud Composer上的气流无法导入模块

时间:2020-05-06 01:16:23

标签: python airflow google-cloud-composer

我正在运行DAG test_dag.py,该文件在Google Cloud Storage Bucket中的结构如下。

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/中的子目录导入,并且当我查看其依赖项文档here时,他们给出的example仅从/dags开始向下一个目录(并且只有1个文件,而不是完整的python包)。

这是一个很奇怪的部分,当我在Airflow中本地运行时(而不是在Cloud Composer上)运行成功。所以我迷茫了为什么我的导入可以在本地运行但不能在Cloud Composer上运行。

我还尝试了从我的__init__.py文件中导入所有内容,这给了我同样的属性错误,并将我的依赖项上移到了似乎找不到它们的gcs-bucket/中完全没有。

当我从DAG中打印出__file__时,我得到/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 :(得分:0)

您可以在__init__.py文件夹下添加dags/并尝试一下吗?