Amazon Glue Python依赖版本更新致作业失败的锁定方案咨询
AWS Glue Python依赖版本漂移导致作业报错解决方案
典型报错:
error: Could not find suitable distribution for Requirement.parse('pandas==1.1.5')
这类报错本质是依赖版本声明不严谨、Glue内置包和自定义包版本冲突、依赖动态拉取导致版本漂移三类原因触发,可按以下方案彻底锁定版本,避免随机报错:
1. 优先对齐Glue版本对应预装依赖
AWS Glue每个大版本(2.0/3.0/4.0)都预装了pandas、numpy、pyspark、boto3等常用数据处理库,且启动时会优先加载内置包,自定义依赖如果和预装版本不匹配,会直接触发版本校验错误:
- 先确认作业使用的Glue版本对应预装包版本,比如Glue 3.0预装pandas 1.1.5、Glue 4.0预装pandas 1.5.3,无特殊需求不要强行指定跨大版本的包版本
- 无自定义版本需求时,直接删掉requirements.txt中对应内置包的版本声明,不要重复指定,避免触发不必要的版本校验
2. 生成全量锁定的依赖文件
不要使用带宽松版本范围的依赖声明(比如pandas>=1.0、pandas~=1.1这类写法),这类写法会在每次作业启动时拉取符合范围的最新版本,子依赖版本也会随机漂移:
- 优先在和Glue运行环境一致的容器(使用官方Glue镜像)中,用pip-tools生成带精确版本、依赖哈希的锁定文件,操作示例:
# 安装pip-tools pip install pip-tools # 写入你需要的顶层依赖精确版本 echo -e "pandas==1.1.5\npyarrow==3.0.0\ns3fs==0.4.2" > requirements.in # 编译生成全量锁定文件,所有子依赖都会锁死固定版本 pip-compile requirements.in --generate-hashes -o requirements-lock.txt
- 将生成的
requirements-lock.txt上传到S3,在Glue作业配置的「Python library path」中指向该S3路径,不要用未锁定版本的松散依赖文件
3. 正确配置Glue依赖加载规则
- 需要额外安装第三方包时,优先用作业启动参数
--additional-python-modules指定精确版本,多个包用逗号分隔,例如--additional-python-modules pandas==1.1.5,scikit-learn==0.24.2,该参数的版本优先级高于普通requirements.txt,不会被其他依赖声明覆盖 - 如果必须使用和内置包版本差异较大的依赖,直接将对应版本的包打包为wheel或zip格式上传到S3,在作业代码开头提前插入自定义包路径,绕开内置包加载优先级,示例:
import sys # 优先加载自定义上传的包路径 sys.path.insert(0, "/tmp/custom-deps/pandas-1.1.5") import pandas as pd
- 严禁在作业启动脚本或代码中执行
pip install -U <包名>这类动态升级命令,该操作会拉取最新版本包,直接导致版本不可控
4. 上线前做环境一致性校验
- 本地测试使用和线上Glue版本完全一致的官方Docker镜像,在镜像中安装锁定的依赖文件,跑通全流程测试后再将依赖上传到生产环境
- 每次调整依赖后必须重新生成全量锁定文件,不要手动修改锁定文件中的版本号,避免子依赖漏锁导致版本漂移
内容的提问来源于stack exchange,提问作者sundarls
相关产品推荐
相关产品推荐

