AWS Glue ETL任务报错:找不到data_transformations_app模块
AWS Glue任务ModuleNotFoundError排查方案
针对你遇到的ModuleNotFoundError: No module named 'data_transformations_app'问题,按以下步骤排查:
检查压缩包目录结构
解压你上传到S3的压缩包,确认结构符合要求:- 如果用
from data_transformations_app import main,压缩包根目录必须有data_transformations_app文件夹,里面包含__init__.py和main.py(__init__.py可以是空文件,但必须存在,标记这是一个Python包)。 - 如果用
import main,压缩包根目录要直接有main.py,不能嵌套在子文件夹里。
很多时候报错是因为压缩时把整个父文件夹打包了,导致解压后代码嵌套在多层目录下,Glue找不到对应的模块。
- 如果用
核对Glue任务的依赖配置
确认你在任务配置里选对了依赖类型:- Python代码依赖应该上传为
.zip或.egg包,配置在Python library path中,而不是放到Dependent jars(这个是给Java/Scala依赖用的)。如果错误地把Python压缩包放到了Jar路径,Glue不会将其加入Python的搜索路径,自然找不到模块。
- Python代码依赖应该上传为
添加调试代码验证路径
在Glue任务的主代码里加入以下调试代码,打印Python搜索路径和解压后的文件结构,定位问题:import sys import os # 打印Python搜索路径 print("Python搜索路径:", sys.path) # 打印临时目录内容(Glue通常会把依赖解压到/tmp下) print("/tmp目录内容:", os.listdir('/tmp')) # 打印当前工作目录 print("当前工作目录:", os.getcwd())运行任务后查看日志,就能知道解压后的模块文件是否在Python能搜索到的路径里。
检查大小写和权限
- Linux环境和S3都是大小写敏感的,确保
main.py、包文件夹名和你的导入语句大小写完全一致(比如不能文件名是Main.py但导入main)。 - 虽然日志显示已下载,但仍要确认Glue执行角色有
S3:GetObject权限到该压缩包的S3路径,同时压缩包本身的访问权限允许Glue角色读取。
- Linux环境和S3都是大小写敏感的,确保
内容的提问来源于stack exchange,提问作者user23391915
相关产品推荐
相关产品推荐

