Python项目调用其他模块类报错:ModuleNotFoundError问题求助
解决相对导入引发的ModuleNotFoundError问题
这是Python相对导入的典型坑,我来帮你理清楚问题根源和解决办法:
问题到底出在哪?
当你直接运行webcam_classifier.py时,这个脚本会被Python标记为__main__模块。而带.的相对导入(比如from .Student import Student)只能在包结构内部生效——也就是说,只有当你的脚本作为某个包的一部分被导入时,Python才会识别这种相对路径。直接运行脚本时,Python不会把当前目录当作一个包,自然找不到所谓的__main__.Student模块。
两种可行的解决方案
方案1:改用绝对导入(最简单直接)
如果webcam_classifier.py和Student.py在同一个文件夹下,直接去掉导入语句里的.就行:
from Student import Student
这种写法在直接运行webcam_classifier.py时完全有效,Python会自动在当前目录下查找Student.py文件。
方案2:把目录转为包,用模块方式运行
如果你坚持要用相对导入(比如项目结构复杂,需要明确区分包内模块),可以按以下步骤操作:
- 在两个文件所在的文件夹里新建一个空文件
__init__.py,这样Python就会把这个目录识别为一个包(比如包名叫my_classifier)。 - 从这个文件夹的上级目录运行脚本,用
-m参数指定模块路径:
python -m my_classifier.webcam_classifier
这样运行时,webcam_classifier.py会被当作my_classifier包的一部分,相对导入的.就会指向当前包,就能正确找到Student类了。
额外小提示
如果你的项目后续会扩展成更复杂的结构,建议提前规划好包结构,并用-m方式运行脚本,能避免不少导入相关的奇怪问题。
内容的提问来源于stack exchange,提问作者mlz7
相关产品推荐
相关产品推荐

