我正在尝试将本地模块(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,但这并不能解决问题。
感谢。
答案 0 :(得分:0)
这通常与Airflow的配置方式有关。
在airflow.cfg
中,确保airflow_home
中的路径已正确设置为Airflow目录结构所在的路径。
然后Airflow扫描所有子文件夹并填充它们以便找到模块。
否则,只需确保您尝试导入的文件夹位于Python路径中:How to use PYTHONPATH
答案 1 :(得分:0)
您需要在__init__.py
目录中添加与script
相同级别的另一个subfolder
文件。
airflow/
|_ dag/
| |_ __init__.py
| |_ my_DAG.py
|_ script/
|_ __init__.py <----- This here
|_ subfolder/
|_ __init__.py
|_ local_module.py
答案 2 :(得分:0)
我的操作方法如下:
现在您可以在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
)
答案 3 :(得分:0)
如果您在 docker 中运行 Airlow,那么您需要执行以下操作:
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,
)