Sagemaker inference.py用boto3上传文件到S3缺模块问题咨询
原因说明
SageMaker官方提供的推理容器默认没有预装boto3库,导入报错属于依赖缺失问题,并非平台禁止在inference.py中使用boto3。
解决方案
有两种常用的解决方式:
- 方式一:在inference.py中动态安装依赖
在导入boto3的代码之前,先添加boto3的安装逻辑:
import subprocess import sys subprocess.check_call([sys.executable, "-m", "pip", "install", "-q", "boto3"]) # 安装完成后再导入boto3 import boto3
- 方式二:自定义推理镜像时预装
如果使用自定义Docker镜像部署端点,可以直接在Dockerfile中添加依赖安装指令,后续无需每次运行时安装:
RUN pip install --no-cache-dir boto3
额外注意事项
代码修正
你当前的上传代码存在两处错误,安装完依赖后需要调整才能正常运行:
- bucket参数无需添加
s3://前缀,直接填写存储桶的纯名称即可 - 你初始化的是s3 resource对象,但调用时用了未定义的
s3_client变量,需要统一初始化逻辑,修正后示例如下:
import boto3 s3_client = boto3.client('s3') # 替换为你的实际存储桶名称 bucket = 'your-bucket-name' object_name = file_name s3_client.upload_file(file_name, bucket, object_name)
权限配置
需要确保SageMaker端点绑定的IAM角色已经配置了目标S3存储桶的写入权限,否则会触发权限拒绝错误。
内容的提问来源于stack exchange,提问作者TLee
相关产品推荐
相关产品推荐

