Django 启动报 ModuleNotFoundError 找不到模块怎么排查

文章导读
Django 启动遇到 ModuleNotFoundError 核心原因通常是 Python 解释器路径不一致或依赖包缺失。排查时优先确认虚拟环境激活状态,再检查代码导入路径配置。
📋 目录
  1. A 真实报错日志分析
  2. B 核心排查步骤
  3. C 生产环境部署专项
  4. D 验证与常见坑
A A

Django 启动遇到 ModuleNotFoundError 核心原因通常是 Python 解释器路径不一致或依赖包缺失。排查时优先确认虚拟环境激活状态,再检查代码导入路径配置。

先说结论:这类报错 90% 是环境隔离导致,优先排查虚拟环境状态和 sys.path 配置。

  • 先确认:当前 shell 是否激活了项目对应的虚拟环境
  • 先处理:第三方包用 pip 安装,本地模块检查 PYTHONPATH
  • 再验证:使用 manage.py check 确认项目配置无误

真实报错日志分析

典型报错如下,注意 traceback 最后一行指出的缺失模块名:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  ...
ModuleNotFoundError: No module named 'rest_framework'

如果是 rest_framework 等第三方包,说明依赖未安装;如果是项目内部的 apps.user,则说明路径配置有问题。

核心排查步骤

1. 检查虚拟环境与解释器

在终端执行 which python(Linux/macOS)或 where python(Windows)。确认输出路径包含虚拟环境目录(如 .venv/bin/python),而非系统全局路径(如 /usr/bin/python)。

Django 启动报 ModuleNotFoundError 找不到模块怎么排查

若路径不对,激活虚拟环境:

source .venv/bin/activate  # Linux/macOS
.venv\Scripts\activate    # Windows

2. 区分缺失模块类型

查看报错中的模块名。若是第三方包(如 requests),执行 pip install 包名;若是本地应用(如 apps.blog),不要使用 pip 安装,应检查项目结构及路径配置。

3. 检查 settings.py 配置

打开 settings.py,核对 INSTALLED_APPS 列表。确保注册的应用名称与文件夹结构一致,且文件夹下存在 __init__.py 文件。

Django 启动报 ModuleNotFoundError 找不到模块怎么排查

4. 配置 PYTHONPATH 环境变量

若本地模块仍无法导入,可能是 Python 搜索路径缺失。在项目根目录执行:

export PYTHONPATH=$(pwd):$PYTHONPATH  # Linux/macOS
set PYTHONPATH=%cd%;%PYTHONPATH%       # Windows

5. IDE 解释器配置检查

  • PyCharm:进入 Settings > Project > Python Interpreter,确认选中项目虚拟环境。
  • VSCode:点击右下角 Python 版本,选择包含项目依赖的解释器。

生产环境部署专项

本地正常但服务器报错,通常是因为启动命令未指定工作目录或路径。

Django 启动报 ModuleNotFoundError 找不到模块怎么排查

Gunicorn 启动:确保使用 `--chdir` 指定项目根目录,或使用绝对路径导入。

gunicorn `--chdir` /path/to/project myproject.wsgi:application

uWSGI 配置:.ini 文件中添加 pythonpath 参数。

[uwsgi]
pythonpath = /path/to/project

验证与常见坑

验证方法:

执行 python manage.py check。若无报错且返回 System check identified no issues,说明模块导入问题解决。随后尝试 python manage.py runserver 观察控制台。

常见坑:

  • 大小写敏感:Linux 下模块名大小写必须完全匹配,Windows 可能忽略这一点导致本地正常线上报错。
  • 循环导入:报错显示找不到模块,实际是文件互相 import 导致初始化失败,检查 models.py 和 views.py 之间的引用。
  • requirements.txt 未更新:部署前确保执行 pip freeze > requirements.txt 同步最新依赖。