如果我在我的venv中创建一个变量,比如这个
DJANGO_SERVER_TYPE=local
在heroku上我有
DJANGO_SERVER_TYPE=production
为什么我的系统不能识别这个
from .base import *
import os
if os.environ['DJANGO_SERVER_TYPE'] == 'local':
try:
from .local import *
except:
pass
if os.environ['DJANGO_SERVER_TYPE'] == 'production':
try:
from .production import *
except:
pass
我一直收到这个错误
File "/Users/ray/Desktop/myheroku/practice/src/gettingstarted/settings/__init__.py", line 3, in <module>
if os.environ['DJANGO_SERVER_TYPE'] == 'local':
File "/Users/ray/Desktop/myheroku/practice/bin/../lib/python3.5/os.py", line 683, in __getitem__
raise KeyError(key) from None
KeyError: 'DJANGO_SERVER_TYPE'
如何使用我创建的局部变量?
问题是您的环境变量在本地不存在。有很多方法可以在本地设置环境变量。
我强烈建议使用Kenneth Reitz编写的autoenv。这是一个很酷的工具,您可以在计算机上本地安装。有关详细信息,请参阅在virtualenv中设置环境变量。
它的工作方式是在项目目录中定义一个名为.env
的文件,并在其中列出所有环境变量
export DJANGO_SERVER_TYPE=local
每次在命令行上输入该目录(如cd ~/my_project
),autoenv都会自动将该文件夹中的任何环境变量设置为活动。它非常有用。
无论如何,如果您不想使用autoenv之类的东西,那么无论您当前在哪里存储环境变量,都需要export
。
假设您有一个文件(env.sh
),其中定义了环境变量,如下所示:
DJANGO_SERVER_TYPE=local
你可以说sh env.sh
来"运行"这个文件。现在,您可能会期望它会运行,并且您现在会在环境变量中定义DJANGO_SERVER_TYPE
,对吧?
不完全是这样。
在sh
(您实际使用的脚本语言)中,如果希望将变量导出到运行脚本的外部,则需要将export
关键字放在变量前面。
因此,为了实际设置变量,您必须说:
export DJANGO_SERVER_TYPE=local
然后将该文件作为脚本运行:sh env.sh
。如果您这样做,您会注意到现在您的环境变量实际上已经设置好了。
在测试时需要知道的另一件有用的事情是,如果在命令行上运行env
命令,它将输出当前设置为LOCALLY的所有环境变量的列表。这对调试很有用,例如:
env | grep DJANGO_