You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AWS Glue作业支持Python旧包读取同目录本地文件

问题根因

这个报错和S3文件操作逻辑无关,本质是运行时工作目录不匹配:AWS Glue加载上传的zip依赖包时,作业启动的默认当前工作目录(CWD)不是zip包解压后的实际存放路径,遗留包写死的相对路径open('data.json')会默认从作业CWD寻址,自然找不到包内自带的JSON文件。全程不需要修改遗留包源码,只要调整作业侧的运行配置就能解决。

可行方案

方案1:工作目录动态切换(零修改遗留包,全Glue版本通用,推荐)

  • 先检查zip包结构:压缩包根目录必须直接放test_lib.py、data.json两个文件,不要额外套一层同名父文件夹(很多人打包时默认把文件放进和zip同名的子目录,会导致Glue导入和路径寻址全部失败)。
  • 进入Glue作业配置页,找到「Job details」-「Advanced properties」-「Job parameters」,新增作业参数:
    • 键:--extra-py-files
    • 值:填写testLib.zip所在的完整S3路径,格式参考s3://<你的桶名>/<存放路径>/testLib.zip
      这是Glue原生的Python依赖加载配置,作业启动时会自动把指定的zip包解压到运行环境的Python模块搜索路径下。
  • 在作业主代码里,导入并调用遗留包逻辑前,加几行切换工作目录的代码即可:
    import os
    import test_lib
    
    # 动态获取遗留包实际解压后的存放路径,切换为当前工作目录
    os.chdir(os.path.dirname(os.path.abspath(test_lib.__file__)))
    
    # 后续直接调用原有逻辑,相对路径可正常命中包内的data.json
    test()
    
    所有调整都在可控的作业主脚本里完成,完全不需要触碰遗留包的源码。

方案2:脚本同目录存放(适合极简结构包)

如果遗留包没有多层嵌套依赖,可以不用打zip包:直接把test_lib.py、data.json两个文件和Glue作业主脚本上传到S3的同一个脚本目录下。Glue启动作业时会自动把主脚本同目录的所有文件拉取到运行时的CWD目录,直接导入调用test()就能正常找到同目录下的JSON文件,不需要额外做路径切换。

避坑提示
  • 不需要尝试修改遗留包的读文件逻辑适配S3,无源码权限的情况下这个路径完全走不通。
  • Glue ETL 2.0/3.0/4.0官方版本下,方案1的逻辑均已验证可用,不需要给依赖包打猴子补丁。
  • 不要随意修改Glue默认的--script-location参数配置,容易导致作业启动失败。

内容的提问来源于stack exchange,提问作者elshev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:42:19