Airflow 2.5.0连接AWS报错:ModuleNotFoundError: 找不到airflow.providers.amazon模块
问题:Airflow 2.5.0 运行S3 DAG时出现ModuleNotFoundError
运行一个用于查看S3存储桶内容的简单Airflow DAG,持续报错:ModuleNotFoundError: No module named 'airflow.providers.amazon'。已尝试多个同类问题推荐的pip安装方案,但问题仍未解决。当前使用Airflow 2.5.0版本。
我的Python脚本
import datetime import logging from airflow import DAG from airflow.models import Variable from airflow.operators.python_operator import PythonOperator from airflow.hooks.S3_hook import S3Hook def list_keys(): hook = S3Hook(aws_conn_id='aws_credentials_old') bucket = Variable.get('s3_bucket') prefix = Variable.get('s3_prefix') logging.info(f"Listing Keys from {bucket}/{prefix}") keys = hook.list_keys(bucket, prefix=prefix) for key in keys: logging.info(f"- s3://{bucket}/{key}") dag = DAG( 'lesson1.exercise4', start_date=datetime.datetime.now()) list_task = PythonOperator( task_id="list_keys", python_callable=list_keys, dag=dag )
Airflow Webserver错误截图

解决方法
1. 安装对应版本的Amazon Provider包
Airflow 2.x版本中,AWS相关的钩子、操作符都迁移到了独立的apache-airflow-providers-amazon包中,你需要安装与Airflow 2.5.0兼容的版本:
pip install apache-airflow-providers-amazon==8.4.0
注意:要确保pip命令指向Airflow实际运行的Python环境,避免安装到系统Python或其他虚拟环境中。
2. 修正S3Hook的导入路径
Airflow 2.x已变更了S3Hook的导入路径,你当前使用的是Airflow 1.x的写法,需要替换为:
from airflow.providers.amazon.aws.hooks.s3 import S3Hook
3. 验证安装并重启服务
- 进入Airflow使用的Python环境,执行以下命令验证导入是否正常:
from airflow.providers.amazon.aws.hooks.s3 import S3Hook
无报错则说明安装成功。
- 重启Airflow Webserver和Scheduler,确保新安装的包被加载:
airflow webserver restart airflow scheduler restart
4. 检查虚拟环境(若使用)
如果Airflow运行在虚拟环境中,必须先激活对应环境再执行安装命令,防止包安装到错误环境导致Airflow无法识别。
内容的提问来源于stack exchange,提问作者June Smith
相关产品推荐
相关产品推荐

