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

Python 3.10项目遇ModuleNotFoundError: No module named 'source'问题求助

问题描述

项目目录结构:

├── source
│   ├── helper
│   │   └── EvalHelper.py
│
└── main.py

项目部署在AWS Sagemaker的/opt/ml/code/目录下,该目录已被加入PYTHONPATH。通过Sagemaker自动执行/usr/local/bin/python main.py时,出现ModuleNotFoundError: No module named 'source'错误。main.py的导入代码如下:

# main.py
from source.helper.EvalHelper import EvalHelper

if __name__ == '__main__':
    eval_helper = EvalHelper()
    eval_helper.perform_eval()

此前尝试过添加PYTHONPATH,以及使用以下sys.path代码(未解决问题):

import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), "lib"))
解决方案

1. 修正sys.path路径配置

你之前添加的lib目录并非项目所需路径,需要将main.py所在的项目根目录加入sys.path。修改main.py开头代码:

import os, sys
# 获取main.py所在的绝对路径(项目根目录)
project_root = os.path.dirname(os.path.abspath(__file__))
# 将项目根目录添加到Python路径
sys.path.append(project_root)

from source.helper.EvalHelper import EvalHelper

if __name__ == '__main__':
    eval_helper = EvalHelper()
    eval_helper.perform_eval()

也可以用更简洁的绝对路径写法:

import sys
sys.path.append('/opt/ml/code/')

2. 验证PYTHONPATH是否生效

在main.py开头添加调试代码,确认项目目录是否在Python路径列表中:

import sys
print("当前PYTHONPATH:", sys.path)

如果输出中没有/opt/ml/code/,需要在Sagemaker的启动脚本中显式设置环境变量:

export PYTHONPATH="/opt/ml/code/:$PYTHONPATH"

3. 补充包识别所需的__init__.py文件

虽然Python 3.3+支持无__init__.py的命名空间包,但为了兼容性,建议在source和helper目录下创建空的__init__.py文件,让Python识别为合法包:

├── source
│   ├── __init__.py
│   ├── helper
│   │   ├── __init__.py
│   │   └── EvalHelper.py
│
└── main.py

4. 避免相对导入的坑

不推荐使用相对导入(如from .source.helper...),因为直接运行main.py时,Python会将其视为顶级脚本,相对导入会触发ImportError: attempted relative import with no known parent package错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:28:15