Airflow Apache气流中的自定义传感器

Airflow Apache气流中的自定义传感器,airflow,Airflow,气流版本:1.10.0 在创建了sensors文件夹和my_sensor.py之后,我添加了 [...] from sensors.my_sensor import MySensor [...] wait_something = MySensor(task_id='taskA') [...] 不幸的是,尝试重新加载DAG时,气流会发出如下抱怨: 损坏的DAG:[/usr/local/aiffort/dags/my_DAG.py]没有名为“传感器”的模块 我还重新启动了服务器以确保安全 下面这

气流版本:1.10.0

在创建了
sensors
文件夹和
my_sensor.py
之后,我添加了

[...]
from sensors.my_sensor import MySensor

[...]
wait_something = MySensor(task_id='taskA')
[...]
不幸的是,尝试重新加载DAG时,气流会发出如下抱怨:

损坏的DAG:[/usr/local/aiffort/dags/my_DAG.py]没有名为“传感器”的模块

我还重新启动了服务器以确保安全

下面这句话(来自前面提到的指南)让我想知道我是否未能更新这个
PATH
变量,但我在任何地方都找不到它,我也没有任何线索:

当气流运行时,它将向路径添加DAG/、插件/、配置/


PS:我不想使用
插件
,该指南的要点是提供一种替代方法,在不使用
插件的情况下加载自定义操作符/传感器/挂钩
尝试以下操作:

来自airflow.sensors.sftp_传感器导入SFTPSensor
#其中,sftp_传感器是我的名字,传感器是SFTPSensor。
类SFTPSensorPlugin(气流插件):
name=“sftp\U传感器”
传感器=[SFTPSensor]

您参考的指南似乎不正确
PATH
是一个环境变量,它列出了一组搜索可执行文件的路径,如Python可执行文件、
grep
vim
PYTHONPATH
是Python用于添加到其模块搜索路径的环境变量。最有可能更新的是
sys.path
,这是运行时的模块搜索路径,其中包括Python的常规模块目录以及
PYTHONPATH
的内容
sys.path
特别有用,因为它在运行时是用户可变的

要检查模块搜索路径的外观,可以将其添加到DAG的顶部:

导入系统 打印(系统路径) 即使在DAG损坏的情况下,如果该部分是脚本的第一部分,那么
打印
输出也将包含在webserver/scheduler的DAG解析日志中。您还可以通过运行以下命令来检查默认的
sys.path
,而不改变气流:

# python3 -c 'import sys; print(sys.path)'
['', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/username/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages']
现在,您可能没有权限将文件写入系统目录,如
/usr/local/lib/python3.8/dist packages
,或者无法使用自定义
PYTHONPATH
重新启动气流。但另一种选择是将自定义传感器放置在您有写入权限的目录中,并在将该路径导入DAG之前更新
sys.path
。大概是这样的:

导入系统 sys.path.append(“/some/arbitral/path/plugins”) 从sensors.my_sensor导入MySensor #…用我的传感器做点什么
我也遇到了同样的问题,结果证明我没有将插件文件夹装入容器中。一旦我安装了它,一切都正常。

谢谢你的回答,但我宁愿避免使用问题中提到的插件。