如何在我的django应用程序中使用venv bash中创建的变量



如果我在我的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_

相关内容

  • 没有找到相关文章

最新更新