Python (django) 环境变量



我正在使用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。您仍应考虑使用单独的设置文件,这主要是推荐的。

最新更新