环境变量在Django内置服务器生效但Apache服务器不生效如何解决?
问题原因
- Apache服务的运行账号默认是本地系统账号,和你登录Windows用的用户账号权限隔离,你在用户/系统环境变量里配置的参数,默认不会被Apache服务读取。
- 如果你用mod_wsgi部署Django,mod_wsgi不会自动将Apache拿到的环境变量同步到Python的
os.environ字典中,需要手动配置传递。
解决方案
方案1:直接在Apache配置中定义环境变量
打开Apache的httpd.conf配置文件,或者你的站点对应的虚拟主机配置文件,添加SetEnv指令定义你需要的环境变量:
SetEnv SMTP_PASSWORD 你的SMTP密码
修改完成后,还需要修改Django项目根目录下的wsgi.py文件,手动将Apache传递的环境变量写入os.environ:
import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名称.settings') application = get_wsgi_application() # 新增环境变量传递逻辑 def wrap_application(environ, start_response): # 列表中添加所有你需要读取的环境变量键名 for env_key in ["SMTP_PASSWORD"]: if env_key in environ: os.environ[env_key] = environ[env_key] return application(environ, start_response) application = wrap_application
保存所有修改后重启Apache服务即可生效。
方案2:修改Apache服务的运行账号
如果你不想修改Apache配置,也可以直接让Apache用你登录系统的账号运行:
- 按下
Win+R输入services.msc打开服务管理器 - 找到Apache对应的服务项,右键选择「属性」
- 切换到「登录」选项卡,选择「此账户」,填写你当前登录Windows的账号和密码
- 保存设置后重启Apache服务,就可以读取到该账号下配置的环境变量了。
内容的提问来源于stack exchange,提问作者user3288051
相关产品推荐
相关产品推荐

