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

Python API开发遇ModuleNotFoundError:无法导入app模块求助

解决Python测试脚本中"ModuleNotFoundError: No module named 'app'"的问题

问题根源

你遇到的问题本质是Python模块搜索路径不包含项目根目录,导致脚本无法识别app作为顶层模块。另外,项目中不同目录的导入规则不统一,也加重了路径混乱。

先确认你的项目结构

首先确保目录层级是这样的(根目录假设为api_project):

api_project/
├── app/
│   ├── __init__.py
│   ├── database.py
│   ├── models/
│   │   ├── __init__.py
│   │   ├── Ad.py
│   │   └── SubCategory.py
│   ├── services/
│   │   ├── __init__.py
│   │   └── AdService.py
│   └── tests/
│       ├── __init__.py
│       └── AdServiceTest.py

具体修复步骤

1. 统一项目内的导入方式

修改services/AdService.py的导入

因为services是app的子目录,必须用从顶层app开始的绝对导入,避免相对导入的歧义:

from app.models.Ad import Ad
from app.models.SubCategory import SubCategory
from app.database import session

class AdService:
    # ... 你的业务代码

保留tests/AdServiceTest.py的绝对导入

当前测试文件里的from app.models.Ad import Ad路径是对的,只要Python能找到app模块就可以正常运行。

2. 让Python找到app模块的两种可行方法

方法一:在项目根目录运行测试

打开终端,切换到api_project/(项目根目录),然后执行以下命令之一:

# 方式1:用unittest模块运行
python -m unittest app.tests.AdServiceTest

# 方式2:直接运行测试文件
python app/tests/AdServiceTest.py

这种方法最规范,不需要修改代码,推荐使用。

方法二:手动把根目录加入搜索路径

如果习惯直接在tests目录下运行脚本,就在AdServiceTest.py的最顶部添加以下代码,强制把项目根目录加入Python的模块搜索路径:

import sys
import os
# 从当前测试文件的位置,往上两级找到项目根目录
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))

# 之后再写原有的导入代码
import unittest
from datetime import datetime
from app.models.Ad import Ad
from app.services.AdService import AdService
# ... 其余代码

3. 避坑提醒

  • 不要直接在tests目录下执行python AdServiceTest.py,此时Python的工作目录是tests/,上层的app不在搜索路径里,必然报错。
  • 不要混用相对导入(比如..models.Ad)和绝对导入,跨目录调用时绝对导入更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:52:17