如何解决Amazon SageMaker Studio Classic自动化笔记本本地文件读写路径问题
解决AWS SageMaker Studio Classic定时任务路径问题的方案
核心问题是定时运行时工作目录切换为/opt/ml/input/data/sagemaker_headless_execution,导致基于os.getcwd()的路径全部失效。解决的关键是以当前Notebook文件自身的位置为基准,动态定位项目根目录,而非依赖工作目录。
具体实现步骤
1. 动态获取项目根目录
在Notebook开头添加以下代码,获取项目根目录的绝对路径:
import os import sys from pathlib import Path # 获取当前Notebook的所在路径 try: # Jupyter Notebook环境下获取路径 from IPython import get_ipython notebook_dir = Path(os.path.abspath(get_ipython().config['IPKernelApp']['connection_file'])).parent.parent except NameError: # 若作为普通Python脚本运行(备用逻辑) notebook_dir = Path(os.path.abspath(__file__)).parent # 假设Notebook直接放在项目根目录下,若Notebook在子文件夹,调整parent层级(如notebook_dir.parent) PROJECT_ROOT = notebook_dir
2. 正确导入自定义模块
替换原来的模块导入代码,改用项目根目录拼接路径:
# 将utils目录添加到Python路径 sys.path.append(str(PROJECT_ROOT / "utils")) import SnowflakeSetup
3. 正确写入输出文件
替换文件写入的路径构建逻辑,确保输出路径基于项目根:
# 构建输出文件的完整路径 output_path = PROJECT_ROOT / "data" / "testsub" / "to_predict" / f"{end_date.strftime('%Y-%m-%d')}_prediction_run_data.csv" # 自动创建不存在的父目录,避免写入失败 output_path.parent.mkdir(parents=True, exist_ok=True) # 写入CSV文件 df.to_csv(output_path, index=False)
为什么之前的方法失效?
- 硬编码路径:SageMaker的headless环境与手动运行环境的目录结构完全不同,硬编码的路径无法通用。
- 环境变量PROJECT_ROOT:定时任务执行时可能未加载你手动配置的环境变量,导致变量为空或无效。
- 依赖os.getcwd():工作目录由执行环境决定,手动运行和定时运行的工作目录不一致,导致路径解析错误。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

