我正在使用 django 和 virtualenvwrapper。我的目标是根据 12Factor 应用程序建议 (http://12factor.net) 从设置文件中删除所有敏感信息,并最终部署到 heroku。在本地测试时,为了实现这一点,我创建了一个具有不同变量值(如 SECRET_KEY)的 .env 文件。我转到我的 virtualenv 目录并将以下行添加到 postactivate 脚本中:
source .env
每当我为项目 aka 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 时,它在一个子进程中运行并且你丢失了环境该外壳中的变量。 export 也会使变量在子进程中可用。
你应该:
export SECRET_KEY=xxxxxxxx
在你的 .env 文件中让它工作。
编辑:
从我从您的链接中读到的内容来看,这只是一个普通的 linux shell 环境变量。但是 django 需要在设置中将 SECRET_KEY 作为 python 常量。 Linux 环境变量和 python 变量是两个不同的东西,所以定义一个环境变量 SECRET_KEY 不会让 django 识别 settings.SECRET_KEY。您仍然应该考虑使用单独的设置文件,这是我们最推荐的。
