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

Python模块导入报ModuleNotFoundError: No module named 'app'求解

问题根因

ModuleNotFoundError: No module named 'app'报错由两个问题直接导致:

  • 导入语句的顶层包名写错。从你给出的验证线索:database/versions目录下的文件执行from api.setup import *可正常导入,说明你项目的顶层业务包实际名为api,不存在名为app的顶层包,services/user.py里写的from app.setup import *自然找不到对应模块。
  • Python模块搜索路径未正确覆盖项目根目录。Python导入模块时只会搜索当前运行脚本所在目录、PYTHONPATH环境变量配置路径、标准库与第三方库路径,如果你直接在services子目录内运行user.py,解释器无法定位到上层的项目根目录,哪怕包名写对也可能出现导入失败。

项目结构截图

修复方案

按优先级操作即可解决问题:

  • 第一步:修正包名导入错误
    把services/user.py内的导入语句替换为匹配实际包名的写法:
    # services/user.py file
    from api.setup import *
    from api.models.user import User
    
  • 第二步:规范脚本运行方式
    不要进入services、models这类子目录直接运行.py文件,始终在包含api、services、database文件夹的项目最外层根目录下,以模块模式运行脚本,例如执行user.py时用命令:
    python -m services.user
    
    这种运行方式会自动将项目根目录加入Python模块搜索路径,不会出现子目录运行时的路径错乱问题。
  • 第三步(可选,一劳永逸):以可编辑模式安装当前项目
    在项目根目录新建最小配置的pyproject.toml文件:
    [build-system]
    requires = ["setuptools>=61.0"]
    build-backend = "setuptools.build_meta"
    
    [project]
    name = "backend-demo"
    version = "0.0.1"
    packages = ["api", "services", "models"]
    
    在项目根目录执行命令:
    pip install -e .
    
    安装完成后,无论你在哪个工作目录运行项目脚本,都可以正常导入项目内的所有模块,不需要反复调整路径。
额外代码问题提示

你当前services/user.py里的查询逻辑有bug:session.scalars()返回的是可迭代的结果集对象,不是单个用户实例,直接访问user.first_name会抛属性错误,需要取单条结果时要在查询后加.first()方法:

def get_user(user_id):
    user = session.scalars(select(User).where(User.id == user_id)).first()
    # 后续打印逻辑不变

另外不建议在项目中大量使用from xxx import *的导入方式,项目规模变大后很容易出现变量命名冲突、依赖溯源困难的问题,建议明确导入需要使用的对象,例如from api.setup import session, select。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:01:34