【问题标题】:Importing local module (python script) in Airflow DAG在 Airflow DAG 中导入本地模块(python 脚本)
【发布时间】:2018-10-13 11:49:26
【问题描述】:

我正在尝试将本地模块(python 脚本)导入我的 DAG。

目录结构:

airflow/
├── dag
│   ├── __init__.py
│   └── my_DAG.py
└── script
    └── subfolder
        ├── __init__.py
        └── local_module.py

my_DAG.py 中的示例代码:

#trying to import from local module
from script.subfolder import local_module  

#calling a function in local_module.py  
a = some_function()  

我在 Airflow 中收到一条错误消息,提示“Broken DAG: my_DAG.没有名为“local_module”的模块。

我已将 Airflow 更新到 1.9.0,但这并不能解决问题。

  • 这里的解决方案是什么?
  • 我还在某处读到,我可以通过创建插件来解决这个问题。谁能指出我该怎么做?

谢谢。

【问题讨论】:

    标签: python airflow


    【解决方案1】:

    这通常与 Airflow 的配置方式有关。

    airflow.cfg 中,确保airflow_home 中的路径正确设置为Airflow 目录结构所在的路径。

    然后 Airflow 扫描所有子文件夹并填充它们,以便可以找到模块。

    否则,只需确保您尝试导入的文件夹位于 Python 路径中:How to use PYTHONPATH

    【讨论】:

    • 我的airflow.cfg 没有没有airflow_home。自发布此答案以来,情况是否发生了变化?
    • 也可以通过设置export AIRFLOW_HOME=path_to_my_airflow_home_dir来实现。
    • 希望能提供到文档的链接,尤其是随着版本的更新,这些答案可能会变得陈旧
    • airflow.apache.org/docs/apache-airflow/stable/… 根据链接 Airflow 只将“dag”、“plugins”和“config”添加到“sys.path”,“airflow_home”不会在路径中
    【解决方案2】:

    我的做法如下:

    1. 在您的子文件夹中使用 main() 函数创建一个 Python 脚本。
    2. 在您的 dag 文件中包含子文件夹和文件的路径声明

    现在您可以在 PythonOperator 中使用此脚本

    import sys
    sys.path.insert(0,"/root/airflow/dags/subfolder"))
    import subfolder.script_name as script
    ...    
    t1=PythonOperator(
        task_id='python_script',
        python_callable=script.main,
        dag=dag
    )
    

    【讨论】:

    • 假设文件在 dags/script/file1.py 下,如何导入?
    【解决方案3】:

    如果您在 docker 中运行 Airlow,那么您需要按以下方式进行操作:

    1. 在 dags 文件夹中为您的模块创建一个文件夹。例如 程序
    2. 如下使用(这是docker的正确路径):
    import sys
    sys.path.append('/opt/airflow/dags/programs/my_module')
    import my_module
    task1 = PythonOperator(
            task_id='my_task_name',
            python_callable=my_module.my_func,
            dag=dag,
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 2023-04-05
      • 2018-11-03
      相关资源
      最近更新 更多