Airflow 1.10.0自定义传感器报错:No module named 'sensors'求助
解决Airflow 1.10.0中自定义Sensor模块导入报错的问题
针对你遇到的No module named 'sensors'错误,不想使用Airflow Plugins的话,可以通过以下两种方法解决,核心都是让Python能够找到你的自定义模块:
方法一:将自定义模块放到DAG目录下(推荐)
Airflow确实会把dags/目录添加到Python的PATH中,你可以调整文件夹结构,把sensors目录放到dags/下面,同时确保Python能识别它为一个包:
- 调整后的目录结构:
/usr/local/airflow/dags/ ├── my_dag.py └── sensors/ ├── __init__.py # 必须添加这个空文件,让Python把sensors识别为包 └── my_sensor.py - 保持DAG文件中的导入语句不变:
from sensors.my_sensor import MySensor - 重启Airflow scheduler和webserver,或者触发DAG重新加载,错误应该就能解决。
方法二:手动将模块目录添加到Python路径
如果不想移动sensors文件夹的位置,可以在DAG文件的开头,手动把sensors所在的父目录添加到Python的系统路径中:
- 假设你的
sensors文件夹在/usr/local/airflow/目录下(和dags/同级),在my_dag.py的最顶部添加以下代码:import sys from pathlib import Path # 获取Airflow根目录(也就是sensors所在的目录) airflow_root = Path(__file__).parent.parent # __file__是当前DAG文件的路径,parent.parent就是dags的上级目录 sys.path.append(str(airflow_root)) - 然后再执行你的导入语句:
from sensors.my_sensor import MySensor - 注意:如果是分布式Airflow部署,要确保所有worker节点上的
sensors文件夹路径一致,或者使用共享存储(比如NFS)挂载该目录,避免worker找不到模块。
额外注意事项
- 不管用哪种方法,
sensors文件夹下必须有__init__.py文件(可以是空文件),否则Python无法将其识别为一个可导入的包。 - Airflow 1.10.0版本比较老旧,后续如果有升级计划,建议考虑升级到稳定的新版本(比如2.x系列),新版本对自定义模块的支持更灵活。
内容的提问来源于stack exchange,提问作者Alessandro S.
相关产品推荐
相关产品推荐

