virtualenvwrapper - 环境变量没有保存

时间:2017-12-21 13:15:19

标签: python django python-3.x virtualenv virtualenvwrapper

我在ubuntu上遇到virtualenvwrapper的问题。

我正在处理简单的 Django 项目foo。我已决定从SECRET_KEY移动settings.py并将其另存为环境变量。一切顺利:

在bash中我已进入

export SECRET_KET=['...']

settings.py已输入:

SECRET_KEY = os.environ['SECRET_KEY']

此外,我测试了该应用正常运行,一切正常。

BUT

我在bash中再次使用workon foo命令开始处理项目之后,我尝试使用python manage.py runserver运行服务器并且SECRET_KEY不是工作。我得到的错误是:

    ...
    SECRET_KEY = os.environ['SECRET_KEY']
  File "/home/user/.virtualenvs/foo/lib/python3.6/os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'SECRET_KEY'

我已经读过这个变量应该在postactivate的{​​{1}}文件中设置,但那里什么都没有。

幸运的是,这只是一个简单的测试项目,但是如何在使用.virtualenvs/foo/bin/时确保环境变量将保存在我的下一个virtualenv中?

1 个答案:

答案 0 :(得分:7)

export命令标记要与任何新分叉的子进程一起导出的环境变量,因此它允许子进程继承所有标记的变量但不保留它。如果您希望变量在虚拟环境中永久可用,则必须手动将其添加到postactivate脚本中:

echo 'export SECRET_KET=KJGH768&^jhgJg' >> /home/user/.virtualenvs/foo/bin/postactivate

但是,一旦离开virtualenv,你必须取消设置变量以避免任何冲突,如下所示:

echo 'unset SECRET_KET' >> /home/user/.virtualenvs/foo/bin/predeactivate