配置DJANGO_SETTINGS_MODULE遇ModuleNotFoundError,求排查方案
解决Django Settings配置错误的问题
看起来你是在直接运行models.py来检查错误,但这不是Django推荐的做法,而且路径配置上也有几个关键点没处理对。咱们一步步来解决:
1. 先回到正确的工作目录
首先确认你的Django项目结构应该是类似这样的(核心是manage.py的位置):
你的项目根目录/ ├── project1/ # 存放settings.py的文件夹,这个是Django自动生成的项目包 │ ├── __init__.py # 这个文件必须存在,否则Python不认它是模块 │ ├── settings.py │ └── ... ├── 你的app文件夹/ │ ├── models.py │ └── ... └── manage.py # 关键!Django的管理命令入口
你需要切换到包含manage.py的那个项目根目录,这是最关键的一步。之前你设置DJANGO_SETTINGS_MODULE时找不到模块,很大概率是因为你当前的工作目录不在项目根,Python没法找到project1这个模块。
2. 用Django官方的命令检查错误
不要直接运行python models.py check,Django提供了专门的管理命令来做这类检查,在项目根目录下执行:
python manage.py check
这个命令会自动加载project1.settings(因为manage.py里已经帮你配置好了),不需要手动设置环境变量,这也是最省心的做法。
3. 如果一定要手动设置环境变量(不推荐,但可以理解)
如果你因为某些原因必须手动配置,那需要同时做两件事:
- 把项目根目录添加到Python的搜索路径里,这样Python才能找到
project1模块 - 设置正确的
DJANGO_SETTINGS_MODULE
在项目根目录下执行这两条命令:
export PYTHONPATH=$(pwd) export DJANGO_SETTINGS_MODULE=project1.settings
之后再运行相关检查命令(不过还是优先推荐用manage.py)。
为什么之前的尝试失败?
- 你用
bugstracker(虚拟环境名称)替换project1是不对的:虚拟环境的名称和Django项目的模块名称完全没关系,project1是你创建Django项目时生成的那个包含settings的包名称,和虚拟环境无关。 - 没把项目根目录加到Python路径:即使你设置了
DJANGO_SETTINGS_MODULE,Python如果找不到project1所在的目录,依然会报ModuleNotFoundError。
内容的提问来源于stack exchange,提问作者Boomy
相关产品推荐
相关产品推荐

