为何持续出现ModuleNotFoundError: No module named 'src'?如何解决?
解决ModuleNotFoundError: No module named 'src'的几种有效方法
方法1:从项目根目录运行脚本
假设你的项目根目录是包含src的上级文件夹(比如路径为/home/xxx/your_project/,该目录下存在src文件夹),打开终端切换到这个根目录,执行以下命令运行脚本:
python src/components/data_ingestion.py
这种方式会让Python自动将项目根目录纳入模块搜索路径,从而识别到src模块。
方法2:修正sys.path的添加逻辑
如果必须直接在src/components目录下运行脚本,要确保将**src的父目录**(项目根目录)加入sys.path,而非src目录本身。修改代码如下:
import os import sys # 获取当前文件的上级目录的上级目录,即项目根目录 project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(project_root) from src.exception import CustomException
此前无效可能是因为错误添加了src目录到sys.path,导致Python无法将src识别为顶层模块。
方法3:设置PYTHONPATH环境变量
通过环境变量将项目根目录加入Python的模块搜索路径:
Linux/macOS终端
export PYTHONPATH="/home/xxx/your_project:$PYTHONPATH" python src/components/data_ingestion.py
Windows命令提示符
set PYTHONPATH=C:\path\to\your_project;%PYTHONPATH% python src\components\data_ingestion.py
若需永久生效,可将该环境变量添加到系统配置文件(Linux的~/.bashrc/~/.zshrc,Windows的系统环境变量设置界面)。
方法4:使用相对导入+模块方式运行(适合包结构场景)
修改data_ingestion.py的导入语句为相对导入:
from ..exception import CustomException
然后从项目根目录以模块方式运行脚本:
python -m src.components.data_ingestion
注意:直接运行脚本时相对导入会报错,此方法仅适用于以包模块形式启动的场景。
内容的提问来源于stack exchange,提问作者Fathima
相关产品推荐
相关产品推荐

