Docker部署的Airflow运行本地脚本报NameError如何解决
问题根因
- 核心问题是变量名拼写不一致:你在定义BashOperator任务时给变量命名为
etl_inventory_sap(正确拼写inventory,含字母n),但在DAG上下文末尾调用的变量名是etl_invetory_sap(拼写错误,漏了字母n,把ven写成了vet),Python找不到对应名称的变量就抛出了NameError。 - 补充冗余代码问题:代码中重复导入了
PythonOperator,虽然不触发报错,但属于冗余代码可以删除。
修复方案
只需要保证变量名前后一致即可,两种修改方式二选一:
- 将定义任务的变量名修改为和调用端一致:
from airflow import DAG from airflow.operators.python import PythonOperator, BranchPythonOperator from airflow.operators.bash import BashOperator from datetime import datetime, timedelta seven_days_ago = datetime.combine(datetime.today() - timedelta(7), datetime.min.time()) args = { 'owner': 'airflow', 'depends_on_past': False, 'start_date': seven_days_ago, 'retries': 1, 'retry_delay': timedelta(minutes=5), } with DAG("invetory_sap", default_args=args, schedule_interval='30 * * * *', dagrun_timeout=timedelta(minutes=60), catchup=False) as dag: # 修改变量名和下方调用保持一致 etl_invetory_sap = BashOperator( task_id='etl_invetory_sap', bash_command='python /opt/airflow/plugins/ler_txt_convert_todataframe_v5.py' ) etl_invetory_sap
- 将末尾调用的变量名修改为和定义端一致的
etl_inventory_sap。
后续可能的注意事项
修复拼写问题后如果BashOperator仍报错,可按顺序排查:
- 确认挂载路径配置正确,容器内
/opt/airflow/plugins/ler_txt_convert_todataframe_v5.py文件真实存在 - 确认Airflow容器内已安装python环境,且脚本依赖的第三方库都已经预装
内容的提问来源于stack exchange,提问作者SrKartcheski
相关产品推荐
相关产品推荐

