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

AWS EMR已安装boto3仍报No module named 'boto3'错误排查

问题根因

pip list能查到boto3但作业仍报ModuleNotFoundError,核心原因是Python环境不匹配,和包是否安装无关:

  1. 手动在主节点执行pip安装,依赖只装在了主节点,EMR的计算步骤会分发到所有core/任务节点运行,worker节点没有对应依赖自然导包失败
  2. 安装依赖的Python解释器路径,和EMR步骤、Spark作业实际调用的Python解释器路径不一致,你装的包不在作业的Python搜索路径里
  3. 依赖版本存在冲突:你requirements指定boto31.16.34、botocore1.19.63,但实际安装结果是boto3 1.24.20、botocore 1.19.52,版本不匹配也会触发导入异常
解决步骤
  • 不要手动在主节点单独装依赖,通过EMR引导操作(Bootstrap Action)统一给所有节点安装依赖:编写安装脚本,在集群启动阶段自动在所有节点执行,脚本内容参考:
#!/bin/bash
# 先从公共存储路径下载你的requirements.txt到节点本地,比如存放在S3的话提前用aws s3 cp拉取
aws s3 cp s3://你的依赖存储路径/requirements.txt /tmp/requirements.txt
sudo pip-3.7 --default-timeout=60 install --force-reinstall -r /tmp/requirements.txt
  • 强制指定作业使用的Python解释器路径,避免路径错位:如果是提交PySpark作业,在提交参数里加以下配置,明确指定使用安装了依赖的Python3.7:
--conf spark.pyspark.python=/usr/bin/python3.7
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=/usr/bin/python3.7
--conf spark.executorEnv.PYSPARK_PYTHON=/usr/bin/python3.7

如果是运行普通Shell类型的EMR步骤,在脚本开头提前声明环境变量:

export PYSPARK_PYTHON=/usr/bin/python3.7
export PYTHONPATH=/usr/lib/python3.7/site-packages:$PYTHONPATH
  • 装完依赖不要只靠pip list验证,直接用对应Python解释器执行导入测试,确认包可用:
/usr/bin/python3.7 -c "import boto3; print(boto3.__version__)"

命令正常返回boto3版本号才算安装到位。

  • 修复权限问题:sudo安装的包默认权限属于root,EMR作业默认用hadoop/yarn用户运行,如果没有site-packages的读权限也会导包失败,安装完成后执行:
sudo chmod -R 755 /usr/lib/python3.7/site-packages/
  • 对齐boto3和botocore版本,避免版本冲突:单独执行强制重装命令,把两个包的版本和requirements里指定的对齐:
sudo pip-3.7 install --force-reinstall boto3==1.16.34 botocore==1.19.63

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:57:21