我正在使用django和virtualenvwrapper。我的目标是根据12Factor app建议(http://12factor.net)从设置文件中删除所有敏感信息,并最终部署到heroku。在本地测试时,为了实现这一点,我创建了一个具有不同变量值的.env文件,如SECRET_KEY。我转到我的virtualenv目录并将以下行添加到postactivate脚本:
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
答案 0 :(得分:1)
我认为你的问题是你通过SECRET_KEY=xxxxxxx
在当前的shell中定义它,但是当你打开一个python shell时,它在子进程中运行并且你丢失了环境变量在那个壳里。 export
也会使子变量中的变量可用。
你应该:
export SECRET_KEY=xxxxxxxx
在.env
文件中,使其有效。
修改强>
从我从你的链接中读到的,这只是一个普通的linux shell环境变量。但是django需要在设置中将SECRET_KEY
作为python常量。 Linux环境变量和python变量是两个不同的东西,因此定义env变量SECRET_KEY
并不能让django识别settings.SECRET_KEY
。您仍应考虑使用单独的设置文件,这是最常推荐的。