分离Django生产/开发环境配置遇异常:引用文件不存在
我之前拆分Django生产/开发环境配置时,也踩过完全一样的坑!咱们一步步来排查和解决:
先确认配置文件的结构合规性
Django识别多环境配置的前提是,你的settings必须是一个Python包(也就是带__init__.py的文件夹)。你的项目结构应该是这样的:项目根目录/ ├── athena/ │ ├── settings/ │ │ ├── __init__.py # 必须要有,哪怕是空文件 │ │ ├── base.py # 存放通用配置(比如INSTALLED_APPS、DATABASE基础配置等) │ │ ├── development.py # 开发环境专属配置 │ │ └── production.py # 生产环境专属配置 │ ├── manage.py │ └── ...其他项目文件我当初就是漏了
__init__.py,导致Django把settings当成普通文件夹而非Python包,直接报文件不存在的错误,这个细节很容易忽略!检查配置文件的导入逻辑
你之前的settings.py里有if/else判断,拆分后应该把通用配置抽去base.py,然后在development.py和production.py里导入基础配置再覆盖专属项。比如development.py的正确写法是:from .base import * # 开发环境特有配置 DEBUG = True ALLOWED_HOSTS = ['localhost', '127.0.0.1'] LOG_LEVEL = 'DEBUG' # 其他开发环境的个性化设置...如果是直接把原
settings.py的代码硬拆成两个文件,很可能会漏了基础配置的导入,或者导入路径写错(比如用了import base而非from .base import *),导致Django无法识别配置模块。验证settings参数的路径准确性
你执行的命令python manage.py runserver --settings=athena.settings.development,路径对应的是athena包下的settings子包中的development模块。要确保这个路径和你的实际文件结构完全匹配:- 确认
athena/settings/development.py确实存在 - 确认
manage.py里的默认配置路径是athena.settings(看manage.py里的os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'athena.settings')这一行)
如果你的settings文件夹是在项目根目录而非athena子文件夹下,那命令应该改成python manage.py runserver --settings=settings.development
- 确认
清理缓存再重试
有时候Python的字节码缓存会干扰模块识别,你可以删掉项目里所有的__pycache__文件夹,然后重新运行命令,大概率能解决一些奇怪的路径问题。
内容的提问来源于stack exchange,提问作者areeekay

