Airflow 2.0.0导入Param报错:ImportError: cannot import name 'Param'如何解决?
解决Airflow 2.0.0中
ImportError: cannot import name 'Param'的问题 问题原因
Param类是Airflow 2.2.0版本才正式引入的特性,你的环境使用的是2.0.0版本,因此无法导入该类。
解决方案
方案1:升级Airflow至2.2.0及以上版本
执行以下命令完成版本升级:
pip install --upgrade apache-airflow>=2.2.0
升级完成后,原代码中Param的用法可以完全保留,无需修改DAG逻辑。
方案2:适配Airflow 2.0.0的参数写法(不升级版本)
Airflow 2.0.0支持在params中直接通过字典定义参数的默认值与约束,不需要使用Param类,修改后的DAG代码如下:
from datetime import datetime from airflow import DAG from airflow.operators.python import PythonOperator is_debug_param = "{{ params.is_debug }}" seti_param = "{{ params.seti }}" def my_main(is_debug: bool, seti: str): print(is_debug) print(seti) with DAG( dag_id="my_main", description='my_main', start_date=datetime(2022, 6, 8, 1, 0), schedule_interval=None, catchup=False, params={ "is_debug": {"default": False, "type": "boolean"}, "seti": {"default": "FG", "type": "string", "enum": ["FG", "RX"]}, }, render_template_as_native_obj=True, ) as dag: task_my_main = PythonOperator( task_id='task_my_main_main', provide_context=True, python_callable=my_main, op_kwargs={ "is_debug": is_debug_param, "seti": seti_param, }, ) task_my_main
注意:Airflow 2.0.0的参数校验逻辑不如2.2.0及以上版本完善,部分约束可能无法严格生效,但基本的默认值和类型提示可以正常使用。
内容的提问来源于stack exchange,提问作者Arie
相关产品推荐
相关产品推荐

