Airflow 1.7+Python3.6构建Dataproc DAG报错:typing无NoReturn属性
问题解决:Airflow 1.7 + Python 3.6 下
typing.NoReturn 缺失报错 问题根源
typing.NoReturn 是 Python 3.6.2 及以上版本才加入标准库的类型注解,你使用的 Python 3.6 版本可能低于3.6.2,或者 Airflow 1.7 依赖的 Google Cloud 相关库版本过高,引入了依赖 NoReturn 的代码,从而触发模块'typing'没有属性NoReturn的错误。
解决方案
1. 升级Python 3.6到最新小版本
如果必须保留Python 3.6,升级到Python 3.6.15(3.6分支的最后稳定版),该版本包含typing.NoReturn定义,可直接解决缺失问题。
2. 锁定兼容的依赖版本
Airflow 1.7是非常老旧的版本,需指定与它和Python 3.6兼容的GCP依赖版本。在你的requirements.txt中添加:
apache-airflow==1.7.0 apache-airflow[gcp]==1.7.0 google-cloud-dataproc<1.0.0
执行pip install -r requirements.txt重新安装依赖,避免高版本GCP库引入不兼容的类型注解。
3. 手动添加兼容补丁(临时方案)
如果无法升级Python或依赖,在DAG文件的最开头添加以下代码,手动补全typing.NoReturn:
import typing # 为Python 3.6早期版本补全NoReturn if not hasattr(typing, 'NoReturn'): typing.NoReturn = type('NoReturn', (), {})
这段代码会在导入其他库之前,给typing模块添加缺失的NoReturn属性,避免报错。
4. 优先考虑升级Airflow版本
Airflow 1.7已停止维护多年,存在大量安全漏洞和兼容性问题。建议升级到Airflow 1.10.15(1.x分支的最后稳定版),它对Python 3.6支持完善,且Dataproc Operator的功能更稳定。
内容的提问来源于stack exchange,提问作者NIHB_10
相关产品推荐
相关产品推荐

