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

执行python manage.py test时遇ImportError,无法导入应用模块

解决Django测试时的ImportError问题

这种导入错误在嵌套结构的Django项目里太常见了,我帮你梳理几个大概率能解决问题的方向:

1. 确认命令运行的目录是否正确

从你的目录结构/project/project/profiles来看,包含manage.py的项目根目录是内层的/project/project,而不是外层的/project。如果你在外层目录运行python manage.py test,Python会找不到内层的project模块,自然就会报No module named 'project.profiles'这类错误。

解决办法:先切换到内层的/project/project目录(也就是manage.py所在的目录),再执行测试命令:

cd /project/project
python manage.py test

2. 修复Python模块搜索路径

如果目录切换后还是有问题,可以手动把项目根目录加入Python的搜索路径。打开manage.py文件,在开头添加以下代码(Django默认的manage.py其实有类似逻辑,但嵌套目录下可能失效):

import sys
import os
# 把当前manage.py所在目录加入搜索路径最前面
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

3. 检查INSTALLED_APPS和包结构配置

(1)确认应用的INSTALLED_APPS写法

你的错误里提到project.profiles、draft1.advertise无法导入,要对应检查settings.py里的INSTALLED_APPS:

  • 如果profiles应用直接在/project/project下(也就是和manage.py同目录),那INSTALLED_APPS里应该写'profiles',而不是'project.profiles';
  • 如果advertise是在/project/project/draft1目录下,那需要确保draft1目录里有__init__.py(空文件即可,让Python把它识别为模块包),然后INSTALLED_APPS里写'draft1.advertise'。

(2)补全缺失的__init__.py文件

所有作为模块包的目录(比如draft1、profiles)都需要有__init__.py文件,哪怕是空的。如果某个应用目录下没有这个文件,Python就不会把它当作可导入的模块,直接导致ImportError。

4. 检查测试文件的导入语句

有时候问题出在测试文件自己的导入路径上。比如测试文件里写了from project.profiles.models import UserProfile,但实际项目里其他文件都是用from profiles.models import UserProfile,这种不一致就会导致测试时导入失败。

统一测试文件的导入方式,和项目中其他业务代码保持一致即可。

5. 验证虚拟环境是否正确激活

如果你用了虚拟环境,先确认当前终端已经激活了项目对应的虚拟环境。如果用了全局Python解释器,可能会因为依赖或路径问题找不到项目模块。可以通过以下命令验证:

  • Linux/macOS:which python,看输出路径是不是虚拟环境里的Python;
  • Windows:where python,同样检查路径是否对应你的虚拟环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:28