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

Python从嵌套子目录导入函数报ModuleNotFoundError问题排查

问题根因

你的操作存在两个核心错误:

  • 首次导入报错是Python模块搜索的默认机制导致的:运行notebook.ipynb时,Python的sys.path默认只包含当前notebook的工作目录(一般是notebooks/文件夹)、Python安装目录等路径,这些路径下不存在名为app的Python包,自然会触发ModuleNotFoundError: No module named 'app'。
  • 追加路径后仍然报错是路径填写错误+路径层级理解错误:
    1. 你写的/app是系统根目录下的绝对路径,指向磁盘最顶层的app文件夹,和你本地存放项目的外层app目录完全不是一个位置,Python当然找不到对应模块;
    2. 就算路径写对,你也需要明确:你项目里带__init__.py的内层app文件夹才是真正的Python包,导入时需要把这个包的父目录(也就是最外层的项目app文件夹)加到sys.path里,而不是把包本身的路径加进去。
正确修复方式

在notebook的最开头单元格执行以下代码,自动追加正确的搜索路径,不需要手动写死绝对路径:

import sys
from pathlib import Path

# 当前notebook在notebooks目录下,往上一级就是外层项目app目录,也就是内层app包的父目录
project_root = Path.cwd().parent.resolve()
if str(project_root) not in sys.path:
    sys.path.append(str(project_root))

执行完上述代码后,再运行from app.file import func_name即可正常导入。

补充说明:如果你的jupyter启动时的工作目录不是notebooks文件夹,就把Path.cwd().parent.resolve()替换成你本地最外层项目app文件夹的实际绝对路径,比如Windows下存放在D:/code/app就写Path("D:/code/app").resolve(),Mac/Linux下存放在~/code/app就写Path.home()/"code/app"。

内容的提问来源于stack exchange,提问作者NineWasps

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:27:40