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

如何在Amazon SageMaker中导入S3存储桶中的Python模块?

解决S3中Python文件在SageMaker作为模块导入的问题

核心原因

S3是对象存储服务,并非本地文件系统,Python的import、open()这类原生方法不支持直接访问S3路径。pd.read_csv能正常读取是因为pandas底层封装了S3的访问逻辑,但原生Python接口没有这个能力。

分步解决方法

1. 先将S3中的.py文件下载到SageMaker容器本地

使用boto3把文件拉取到容器的本地文件系统(比如当前工作目录):

import boto3

s3 = boto3.client('s3')
# 替换为你的实际存储桶名和S3文件路径
bucket_name = 'your-bucket-name'
s3_file_path = 'foo/bar.py'
local_save_path = './bar.py'  # 下载到当前工作目录

s3.download_file(bucket_name, s3_file_path, local_save_path)

2. 确保文件所在目录在Python模块搜索路径中

如果文件下载到了非默认搜索路径(比如./my_modules/bar.py),需要把该目录添加到sys.path:

import sys
import os

module_dir = os.path.abspath('./my_modules')
if module_dir not in sys.path:
    sys.path.append(module_dir)

3. 正确导入模块

导入时不要加.py后缀,直接使用模块名:

import bar  # 错误写法:import bar.py

常见错误排查

  • 不要直接将S3路径(如s3://your-bucket/foo)添加到sys.path,Python无法识别S3协议路径。
  • open()报错是因为它只能访问本地文件系统,必须先下载文件才能使用该方法。
  • 导入时加.py后缀会被当作模块名的一部分,导致Python找不到对应模块。

进阶批量方案

如果有多个模块文件,建议将整个模块目录打包为.zip上传到S3,在SageMaker作业(Notebook/训练任务)启动时,通过source_dir参数指定S3路径,SageMaker会自动将整个目录下载到容器的/opt/ml/code/目录(该目录默认在sys.path中),直接导入即可。示例训练作业定义:

from sagemaker.sklearn import SKLearn

estimator = SKLearn(
    entry_point='train.py',
    source_dir='s3://your-bucket/your-module-dir/',
    role='your-sagemaker-role',
    instance_type='ml.t2.medium'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:00:28