Python(django)环境变量

时间:2016-01-29 19:45:47

标签: python django heroku foreman env

我正在使用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

1 个答案:

答案 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。您仍应考虑使用单独的设置文件,这是最常推荐的。