Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django settings.py os.environ.get(“X”)未获取正确的值_Python_Linux_Django_Zsh_Boto - Fatal编程技术网

Python django settings.py os.environ.get(“X”)未获取正确的值

Python django settings.py os.environ.get(“X”)未获取正确的值,python,linux,django,zsh,boto,Python,Linux,Django,Zsh,Boto,我试图访问OS环境变量并将其值获取到settings.py中,而在调试应用程序时,我并没有获取该记录的值。详情如下: 有些重要/机密密钥无法在代码中共享,因此这些密钥将导出到操作系统环境变量中。每当我从linux终端或python shell(manage.py shell)回显$KEY_VAL时,它都会打印环境变量的正确值 但在调试应用程序时,它显示值为“无”。我正在使用ipdb调试器,使用以下命令打印值时,结果为“无”: p settings.KEY_VAL 在settings.py中,以

我试图访问OS环境变量并将其值获取到settings.py中,而在调试应用程序时,我并没有获取该记录的值。详情如下:

有些重要/机密密钥无法在代码中共享,因此这些密钥将导出到操作系统环境变量中。每当我从linux终端或python shell(manage.py shell)回显$KEY_VAL时,它都会打印环境变量的正确值

但在调试应用程序时,它显示值为“无”。我正在使用ipdb调试器,使用以下命令打印值时,结果为“无”:

p settings.KEY_VAL
在settings.py中,以下是获取os env变量的语句:

import os; KEY_VAL = os.environ.get("KEY_VAL")
我在我的ubuntu系统中使用ZSH。这是我的~/.zshrc文件:

#
# Executes commands at the start of an interactive session.
#
# Authors:
#   Sorin Ionescu <sorin.ionescu@gmail.com>
#

# Source Prezto.
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then
  source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
fi

export KEY_VAL='SOME_JUNK_VAL'


fortune | cowsay | lolcat

# Customize to your needs...
#
#在交互式会话开始时执行命令。
#
#作者:
#索林·伊奥尼斯库
#
#来源:Prezto。
if[-s“${ZDOTDIR:-$HOME}/.zprezto/init.zsh”];然后
来源“${ZDOTDIR:-$HOME}/.zprezto/init.zsh”
fi
导出密钥\'u VAL='SOME \'u JUNK \'
《财富》杂志
#根据您的需要定制。。。
注意:我已经更改了变量名和值


但如果你能帮忙,我很感激

您的问题当然不在于python代码。这在我们的许多django应用程序中都能完美地工作

我猜您根本没有从zsh启动django服务器,因此没有加载.zshrc。对于标准nginx/gunicorn设置来说,情况肯定是这样的,gunicorn作为守护进程运行,从不通过交互式命令行。另外,可能是您没有使用相同的用户来执行此操作

您可以通过在django应用程序的某处添加以下代码来验证这一点:

import os
print os.environ

顺便说一句,您还可以重新考虑通过.zshrc注入环境变量。对于简单的设置,我们通常将它们保存在.env文件中,并用于在django启动时读取它们。就安全性而言,这与您的设置相同,但它不绑定到登录用户。

如何启动django服务器?您是对的@Nuschk。我一次又一次地调试这个应用程序,发现通过python manage.py runserver运行django工作得非常好,但如果用户通过nginx尝试这个应用程序,那么它会给我带来问题。是的,这听起来和我预期的很像。正如我所说的,django dotenv可能正是您想要的。