如何在AWS Glue Python Shell中指定多个外部Python库(.egg/.whl文件)
解决AWS Glue Python Shell引入多个外部库的问题
我之前在使用Glue Python Shell时也碰到过一模一样的问题——单个外部库能正常加载,但多个库就卡壳了,分享几个亲测有效的解决办法:
方法1:将所有依赖打包成单个ZIP文件
这是最省心的方式,步骤如下:
- 本地把需要的
pandas.whl、numpy.whl、openpyxl.whl、pytz.whl(或对应的.egg文件)放到同一个文件夹里,不要嵌套子文件夹 - 把这个文件夹里的所有文件直接压缩成ZIP包(确保ZIP根目录就是这些库文件,不是外层文件夹)
- 上传这个ZIP包到你的S3存储桶,然后在Glue作业的「Python library path」配置项里填写这个ZIP包的完整S3路径(比如
s3://your-bucket/libraries/deps.zip)
Glue会自动解压这个ZIP包,并加载里面的所有外部库,完全不需要额外配置。
方法2:使用--extra-py-files命令行参数指定多个路径
如果不想打包,也可以直接通过作业参数指定多个库文件:
- 在Glue作业的「Job parameters」部分,添加一个新的参数:
- 参数键:
--extra-py-files - 参数值:把所有库的S3完整路径用逗号分隔,比如:
s3://your-bucket/libraries/pandas-2.1.3-cp39-none-manylinux_2_17_x86_64.whl,s3://your-bucket/libraries/numpy-1.26.2-cp39-none-manylinux_2_17_x86_64.whl,s3://your-bucket/libraries/openpyxl-3.1.2-py2.py3-none-any.whl,s3://your-bucket/libraries/pytz-2023.3.post1-py2.py3-none-any.whl
- 参数键:
- 保存配置后运行作业,Glue会依次加载这些指定的库文件。
关键注意事项
- 版本兼容性:一定要下载和Glue Python Shell运行环境匹配的库版本。比如如果你的Glue作业用的是Python 3.9,就必须下载标注
cp39的whl文件,否则会出现导入失败的情况。 - 依赖顺序:如果库之间有依赖关系(比如pandas依赖numpy),建议把被依赖的库放在参数值的前面,虽然Glue通常能自动处理,但这样可以避免潜在的加载问题。
- 不要冗余文件:打包或指定的时候只需要核心的.whl/.egg文件,不要把本地安装时生成的
*.dist-info这类文件夹也包含进去,会增加不必要的体积甚至导致加载错误。
内容的提问来源于stack exchange,提问作者Ludwig
相关产品推荐
相关产品推荐

