为何在Django的settings.py中读取环境变量无效?求排查
问题排查与解决
以下是可能的原因和对应的解决办法:
1. Django进程未继承bashrc的环境变量
如果用IDE(比如PyCharm、VS Code)启动Django服务器,IDE启动的进程不会自动读取用户的~/.bashrc配置——因为它并非从你的bash会话中启动。
- 解决:打开IDE的运行/调试配置,找到环境变量设置项,手动添加
DJANGO_DEVELOPMENT=true,再重启服务器。
2. sudo启动导致环境变量丢失
sudo默认会重置环境变量,即便当前用户的环境变量已生效,用sudo启动的进程也读不到。
- 解决:用
sudo -E python manage.py runserver启动,-E参数会保留当前用户的环境变量。
3. 使用的不是bash shell
如果默认shell是zsh(当前很多Linux/macOS默认用zsh),修改~/.bashrc不会生效,因为zsh加载的是~/.zshrc。
- 解决:把
export DJANGO_DEVELOPMENT=true添加到~/.zshrc,执行source ~/.zshrc生效后再启动Django。
4. 终端为login shell,未加载bashrc
部分终端启动时是login shell,会优先加载~/.bash_profile而非~/.bashrc,导致bashrc里的变量未被读取。
- 解决:要么把环境变量直接加到
~/.bash_profile里,要么在~/.bash_profile中添加一行source ~/.bashrc,执行source ~/.bash_profile或重新登录终端即可。
临时验证方法
若不确定问题根源,可在启动Django前直接在终端临时导出变量:
export DJANGO_DEVELOPMENT=true && python manage.py runserver
如果这样Django能读到变量,说明是环境变量的继承/加载问题,对应上面的方法解决即可。
内容的提问来源于stack exchange,提问作者HackZero
相关产品推荐
相关产品推荐

