我正在运行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似乎不喜欢(请参阅下面的评论)。想知道是否有解决办法吗?
答案 0 :(得分:0)
您可以在__init__.py
文件夹下添加dags/
并尝试一下吗?