python没有正确读取shell环境变量(缺少前导的“等号”)

python没有正确读取shell环境变量(缺少前导的“等号”),python,django,shell,virtualenv,zsh,Python,Django,Shell,Virtualenv,Zsh,我的shell专门针对变量的zsh输出不同于Python的os.environ输出 我在尝试创建一个测试Django站点时遇到了这个问题,我在两勺Django中读到了这些内容 我正在尝试将密钥值放入我的virtualenv的bin/activate脚本中 以下是我放在bin/activate末尾的内容: 激活virtualenv后执行echo$SECRET_密钥可提供: =43v#b7jdiam3#j1s^#ulg=(+ofl=a&^m8-4z 正如所料。但是,当我使用以下方法在Pyt

我的shell专门针对变量的zsh输出不同于Python的os.environ输出

我在尝试创建一个测试Django站点时遇到了这个问题,我在两勺Django中读到了这些内容

我正在尝试将密钥值放入我的virtualenv的bin/activate脚本中

以下是我放在bin/activate末尾的内容:

激活virtualenv后执行echo$SECRET_密钥可提供:

=43v#b7jdiam3#j1s^#ulg=(+ofl=a&^m8-4z
正如所料。但是,当我使用以下方法在Python中访问该变量时:

import os
print os.environ["SECRET_KEY"]
它给了我

43v#b7jdiam3#j1s^#ulg=(+ofl=a&^m8-4z
没有前面的等号

我不知道差异的来源在哪里。我甚至不知道这是否是一个问题,但shell和python对它们的理解不同,这似乎很奇怪

Django项目似乎运行正常。环境变量中的这种差异会有问题吗

更新:

我用单引号替换了导出行。结果如下:

[1] =43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z
[2] 43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z
其中,[1]是终端上echo$SECRET_KEY的结果,[2]是导入os的结果;在python shell上打印os.environ[SECRET_KEY]

更新2:

我正在Mac OS X 10.8和自制ZSH 5.0.4上使用自制Python 2.7.6

我继续调查,并使用bash而不是zsh。它工作正常

现在,这是zsh还是virtualenv的问题

更新3:


我使用zsh在virtualenv外部执行了导出行,并在python中再次检查了该变量。这个问题仍然存在。因此,我认为问题出在zsh上。

如果你加上单引号,它就会起作用:

spaghetti% export SECRET_KEY='=43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z' 
spaghetti% python
Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os; print os.environ["SECRET_KEY"]
=43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z

尝试转义美元和其他shell特殊字符,例如使用'作为字符串分隔符。对我来说,最初的等号是存在的,但是美元对我来说是可以替代的zsh@sk1p我用单引号更新了我的问题。前导的等号仍然丢失。也许你正在打等号扩展?您是否觉得有必要弄清这一点,或者您只是想确保您的项目正常工作?如果是后者,您可以将等号更改为任何其他字符,或者-这只是一个随机字符串注意:如果您已经在生产中使用了上一个密钥,这将使所有现有的符号cookie无效。我已更新我的帖子,使用单引号。仍然不起作用。哎哟,没有看到更新。。。不管怎样,你使用的是什么版本的python?我使用的是2.7.6版本的自制软件。
spaghetti% export SECRET_KEY='=43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z' 
spaghetti% python
Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os; print os.environ["SECRET_KEY"]
=43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z