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

如何在AWS EMR Serverless上运行含依赖的多模块Python项目

多模块Python项目适配AWS EMR Serverless打包方案

一、先明确EMR Serverless支持的文件类型

  • 单个.py脚本
  • ZIP压缩包:多模块项目首选,能打包所有代码和依赖
  • Python Wheel包:适合封装成可安装的标准包

二、打包多模块项目的实操步骤

1. 先理清楚项目结构

确保结构清晰,比如:

my_project/
├── main.py          # EMR要执行的主入口脚本
├── my_modules/      # 你的自定义模块目录
│   ├── __init__.py
│   ├── module_a.py
│   └── module_b.py
└── requirements.txt # 依赖清单

2. 把依赖装到项目目录里

用pip把所有依赖安装到项目内的lib文件夹,避免打包系统自带库:

pip install -r requirements.txt -t ./lib

划重点:如果依赖有原生扩展(比如numpy、pandas),一定要在Amazon Linux 2环境下安装(比如用EC2或者Docker模拟),不然放到EMR Serverless上会跑不起来。

3. 打包成ZIP包

把项目所有内容(包括自定义模块、lib、main.py、requirements.txt)打包成ZIP:

zip -r my_project.zip my_project/

注意:ZIP根目录要直接是main.py、my_modules这些文件/文件夹,别把外层的my_project目录也包进去,不然EMR找不到入口。

4. 上传到S3

把打好的ZIP传到你的S3桶里:

aws s3 cp my_project.zip s3://your-bucket/emr-jobs/

三、在EMR Serverless上运行的配置

创建作业时注意这几个关键配置:

  • 作业指定的文件路径:填S3上的ZIP包路径,比如s3://your-bucket/emr-jobs/my_project.zip
  • 主脚本路径:填ZIP根目录下的入口文件,比如main.py
  • Python路径配置:要么在作业的Python设置里把./lib加到PYTHONPATH,要么在main.py开头加这段代码:
import sys
sys.path.insert(0, './lib')

四、另一种方案:打包成单个可执行文件

如果非要单个文件,用PyInstaller,但必须满足:

  • 必须在Amazon Linux 2环境下打包,不然生成的可执行文件在EMR上跑不了
  • 打包命令参考:
pyinstaller --onefile main.py --add-data "my_modules/:my_modules"
  • 把生成的dist/main可执行文件传到S3,EMR作业直接指定这个文件路径就能运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:41:29