Python嵌套模块处理机制及ModuleNotFoundError报错求助
Python嵌套模块导入问题解决方法
你的问题出在模块导入路径的搜索逻辑上:当通过main.py导入sub.b时,Python的模块搜索路径是基于main.py所在的根目录,而b.py里直接写from c import do_c会让Python在全局搜索路径里找c.py,而非sub目录下的文件,所以触发了找不到模块的错误。以下是几种可行的解决方法:
相对导入(推荐在同模块内使用)
在b.py里使用相对路径导入,明确指定从当前目录(sub)导入c模块:from .c import do_c注意:这种方式仅在
b.py作为模块被导入时生效(比如你的场景中通过main.py导入),如果直接运行b.py会报错,因为此时它被当作顶层脚本,不支持相对导入。绝对导入(推荐用于跨模块或结构复杂的项目)
使用完整的模块层级路径导入,直接定位到sub下的c模块:from sub.c import do_c这种方式更清晰,不受脚本运行方式的限制,即使后续调整模块结构,只要层级关系不变就能正常工作。
临时添加模块路径(不推荐,仅应急用)
如果不想修改导入语句,可以在b.py开头把sub目录加入Python的搜索路径:import sys import os # 获取当前文件所在目录的绝对路径 current_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.append(current_dir)之后就能用
from c import do_c正常导入,但这种方式会污染全局搜索路径,容易引发命名冲突,不建议在正式项目中使用。
另外确认一下sub目录下的__init__.py是空文件即可,不需要额外内容,它的作用只是标记该目录为Python可识别的模块目录。
内容的提问来源于stack exchange,提问作者t tran
相关产品推荐
相关产品推荐

