Django单元测试出现ModuleNotFoundError: No module named 'JoParis.JoBooking'求助
Django单元测试导入CustomUser时出现ModuleNotFoundError的原因及解决办法
错误原因
- 绝对导入路径错误:Django运行测试时,会自动把包含
manage.py的项目根目录加入Python路径。你用from JoParis.JoBooking.models import CustomUser,是把外层项目目录JoParis当成了Python包的一部分,但实际上JoBooking本身就是顶级可导入的应用包,不需要额外加外层目录名。 - 相对路径导入的结构问题:如果用相对路径导入失败,大概率是测试文件的位置不对——测试文件必须放在
JoBooking应用下的tests目录里,且该目录必须有__init__.py,否则相对路径无法识别同应用下的模块。
解决方法
方法1:修正导入语句
直接使用应用包名作为导入起点,不需要带项目目录名:
from JoBooking.models import CustomUser
如果测试文件本身就在JoBooking/tests目录下,用相对路径更简洁:
from .models import CustomUser
方法2:确认项目结构与运行路径
- 确保你的项目是标准Django结构:
JoParis/ ├── JoParis/ # 项目配置包 │ ├── __init__.py │ ├── settings.py │ └── urls.py ├── JoBooking/ # 业务应用包 │ ├── __init__.py │ ├── models.py │ ├── tests/ │ │ ├── __init__.py │ │ └── test_custom_user.py │ └── views.py └── manage.py - 必须在包含manage.py的项目根目录下执行测试命令:
这样Django才能正确识别应用包的位置,避免路径找不到的问题。python manage.py test # 或者用pytest pytest
快速验证导入是否正常
在项目根目录下启动Python交互环境,测试导入语句是否生效:
python
然后输入:
from JoBooking.models import CustomUser
如果没有报错,说明路径没问题,直接把测试文件里的导入语句改成这个即可。
内容的提问来源于stack exchange,提问作者kiona H
相关产品推荐
相关产品推荐

