You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署的Airflow运行本地脚本报NameError如何解决

问题根因
  • 核心问题是变量名拼写不一致:你在定义BashOperator任务时给变量命名为 etl_inventory_sap(正确拼写inventory,含字母n),但在DAG上下文末尾调用的变量名是 etl_invetory_sap(拼写错误,漏了字母n,把ven写成了vet),Python找不到对应名称的变量就抛出了NameError。
  • 补充冗余代码问题:代码中重复导入了PythonOperator,虽然不触发报错,但属于冗余代码可以删除。
修复方案

只需要保证变量名前后一致即可,两种修改方式二选一:

  1. 将定义任务的变量名修改为和调用端一致:
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
  1. 将末尾调用的变量名修改为和定义端一致的etl_inventory_sap。

后续可能的注意事项

修复拼写问题后如果BashOperator仍报错,可按顺序排查:

  • 确认挂载路径配置正确,容器内/opt/airflow/plugins/ler_txt_convert_todataframe_v5.py文件真实存在
  • 确认Airflow容器内已安装python环境,且脚本依赖的第三方库都已经预装

内容的提问来源于stack exchange,提问作者SrKartcheski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:48:02