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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:15:31