ModuleNotFoundError求助:'arichuvadi'非包无法导入valam模块
解决ModuleNotFoundError: No module named 'arichuvadi.valam'问题
问题原因
直接运行python mlm/arichuvadi/uyirmei.py时,Python会将**脚本所在的目录(mlm/arichuvadi)**添加到sys.path中,而非项目根目录。此时arichuvadi被视为脚本的所在目录,而非mlm包下的子包,导致无法找到arichuvadi.valam。而REPL中能正常导入,是因为pip install -e .已将项目根目录加入sys.path,Python能正确识别arichuvadi作为mlm下的包。
解决方案
方案1:用模块方式运行(推荐)
从项目根目录执行以下命令,通过Python的模块运行机制加载脚本,确保包结构被正确识别:
python -m mlm.arichuvadi.uyirmei
方案2:修改导入语句为相对导入
如果需要保留直接运行脚本的方式,可将uyirmei.py中的导入语句改为相对导入:
将import arichuvadi.valam(或类似导入arichuvadi.valam的语句)替换为:
from . import valam # 若需导入valam中的具体内容,可写为: from .valam import 目标函数/类名
注意:这种方式下,脚本仅能作为包的一部分运行,直接执行python mlm/arichuvadi/uyirmei.py仍可能报错,优先推荐方案1。
方案3:临时修改sys.path(不推荐)
在uyirmei.py的最顶部添加以下代码,手动将项目根目录加入sys.path:
import sys import os sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../../')))
这种方式虽能解决问题,但会降低代码可移植性,不建议长期使用。
内容的提问来源于stack exchange,提问作者vanangamudi
相关产品推荐
相关产品推荐

