Airflow连接Snowflake遇ModuleNotFoundError,请求协助解决
解决Airflow连接Snowflake的ModuleNotFoundError问题
问题根源
错误ModuleNotFoundError: No module named 'airflow.providers.snowflake'主要来自两个点:
- 导入路径过时:你代码里用的
airflow.contrib.hooks.snowflake_hook是Airflow 1.x时代的写法,2.x版本中Snowflake相关组件已迁移到airflow.providers路径,contrib下的文件仅做重定向,若providers包未正确加载就会触发错误。 - 环境不匹配:云shell中用
pip3安装的包,可能和Airflow实际运行的Python环境不一致,导致Airflow无法识别已安装的依赖。
具体修复步骤
1. 替换代码中的导入路径
将旧的导入语句替换为Airflow 2.x官方推荐的路径:
# 替换原语句:from airflow.contrib.hooks.snowflake_hook import SnowflakeHook from airflow.providers.snowflake.hooks.snowflake import SnowflakeHook
如果DAG中用到了Snowflake Operator,同样更新导入:
# 替换原语句:from airflow.contrib.operators.snowflake_operator import SnowflakeOperator from airflow.providers.snowflake.operators.snowflake import SnowflakeOperator
2. 确保依赖安装到Airflow的Python环境
Airflow可能使用独立的Python环境,需用Airflow对应的pip重新安装依赖:
- 先查看Airflow使用的Python解释器路径:
airflow info | grep "Python Version" - 用对应路径的pip重新安装包(示例路径为
/opt/python3.8/bin/pip3,根据实际结果替换):/opt/python3.8/bin/pip3 install snowflake-connector-python==2.4.5 snowflake-sqlalchemy==1.2.4 apache-airflow-providers-snowflake==2.3.0 apache-airflow-providers-common-sql
3. 验证版本兼容性
apache-airflow-providers-snowflake==2.3.0要求Airflow核心版本≥2.1.0,执行以下命令检查版本:
airflow version
若Airflow版本低于要求,需升级Airflow或调整providers包版本(比如降级到适配旧Airflow的providers版本)。
4. 重启Airflow服务
安装完成后重启Airflow的webserver和scheduler,确保新依赖被加载:
# 根据你的部署环境调整命令,示例为systemctl管理的服务 sudo systemctl restart airflow-webserver airflow-scheduler
内容的提问来源于stack exchange,提问作者Sachin Mittal
相关产品推荐
相关产品推荐

