我正在使用django和virtualenvwrapper。我的目标是根据 12Factor 应用程序建议 (http://12factor.net) 从设置文件中删除所有敏感信息,并最终部署到 heroku。在本地测试时,为了实现这一点,我创建了一个具有不同变量值(如 SECRET_KEY)的 .env 文件。我转到我的 virtualenv 目录并将以下行添加到激活后脚本中:
source .env
每当我为一个项目(又名 workon project_name)启动虚拟环境时,如果我从终端回显,.env 中的环境变量都是可用的
$ echo $SECRET_KEY
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
但是,当我尝试从python访问这些变量时,它们不可用
>>> import os
>>> os.environ.get('SECRET_KEY')
>>>
python访问存储在.env文件中的环境变量的正确方法是什么?
.env 文件:
WEB_CONCURRENCY=2
SECRET_KEY='XXXXXXXXXXXX'
DEBUG=True
我认为你的问题是你通过执行SECRET_KEY=xxxxxxx
在当前的 shell 中定义它,但是当你打开一个 python shell 时,它在一个子进程中运行,你丢失了该 shell 中的环境变量。 export
也会使变量在子进程中可用。
您应该具备:
export SECRET_KEY=xxxxxxxx
在您的.env
文件中使其正常工作。
编辑:
从我从您的链接中读到的内容来看,这只是一个普通的 linux shell 环境变量。但是 django 需要在设置中SECRET_KEY
作为 python 常量。Linux 环境变量和 python 变量是两回事,所以定义一个 env 变量SECRET_KEY
不会让 django 识别settings.SECRET_KEY
。您仍应考虑使用单独的设置文件,这主要是推荐的。