Cloud Composer 上的 Airflow 无法导入模块

Mat*_*att 6 python airflow google-cloud-composer

我正在test_dag.py我的 Google Cloud Storage Bucket 中运行一个 DAG,其结构如下。

gcs-bucket/
    dags/
        test_dag.py
        dependencies/
            __init__.py
            dependency_1.py
            module1/
                __init__.py
                dependency_2.py
Run Code Online (Sandbox Code Playgroud)

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/查看它们的依赖项文档时,他们给出的示例仅是下一级目录(并且只有 1 个文件,而不是完整的文件) python 包)。/dags

不过,这是一个奇怪的部分——当我在 Airflow 本地(而不是在 Cloud Composer 上)运行它时,它运行成功。因此,我不知道为什么我的导入可以在本地运行,但不能在 Cloud 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']
Run Code Online (Sandbox Code Playgroud)

我在这里完全不知所措,任何帮助将不胜感激。谢谢。

编辑:Cloud Composer 似乎不喜欢依赖项尝试导入其他依赖项(请参阅下面的评论)。想知道是否有办法解决这个问题?

Nan*_*ore 1

您可以添加到文件夹__init__.pydags/并尝试一下吗?