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

Azure ML使用预构建Docker镜像运行管道报ModuleNotFoundError

问题根因
  • 你写的sys.path.append(".")追加的是脚本执行时的当前工作目录(CWD),而非入口脚本自身所在的目录。本地运行能成功是因为你本地执行脚本时,CWD刚好是Preprocess文件夹的父目录;但Azure ML执行PythonScriptStep时,默认CWD和你本地的执行路径不一致,大概率落在了Pipeline子目录或者Preprocess目录本身,Python在CWD下找不到Preprocess包,就会抛出导入错误。
  • 从你给出的项目结构看,包层级本身没有问题,Preprocess目录下也存在__init__.py,不属于漏写包标识文件的问题。
修复方案

方案1:基于脚本绝对路径追加搜索路径(无环境依赖,优先推荐)

删掉原来用相对路径追加sys.path的逻辑,改为通过入口脚本custom_pipeline.py的自身位置计算项目根目录,再加入搜索路径,这种写法完全不受执行时CWD影响,本地和Azure环境都能正常运行:

import sys
import os
# 获取当前入口脚本的所在目录绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 向上回溯两级:Pipeline目录 -> Preprocess目录 -> Preprocess的父目录(项目根)
project_root = os.path.abspath(os.path.join(current_dir, "../.."))
sys.path.append(project_root)

from Preprocess.logger import logger

方案2:修正PythonScriptStep的目录配置

检查e.sources_directory的取值,必须确保它指向**Preprocess文件夹的父目录**,而非Preprocess文件夹本身或者更深层的Pipeline目录。Azure ML会将source_directory下的全部内容上传到计算节点作为执行上下文,如果这个路径配错,执行环境里根本不会存在顶层的Preprocess文件夹,再怎么改路径也无法导入。
如果确认source_directory配置正确,也可以直接在runconfig里把CWD加入PYTHONPATH,不需要在业务代码里追加路径:

# 在run_config初始化后添加
run_config.environment.environment_variables["PYTHONPATH"] = "."

方案3:打包为本地Python包(适合生产场景)

如果后续这个模块需要在多个管道步骤里复用,可以把Preprocess模块打包为标准wheel安装包,在Azure ML的Environment配置中添加本地pip依赖,执行时会自动把包装到系统Python路径里,完全不需要手动处理sys.path。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.15 16:16:01