virtualenvwrapper - 环境变量不保存

mar*_*rze 2 python django virtualenv virtualenvwrapper python-3.x

virtualenvwrapper在ubuntu上有问题.

我正在研究简单的Django项目foo.我决定SECRET_KEYsettings.py环境变量中移除并保存它.一切顺利:

在bash我进入了

export SECRET_KET=['...']
Run Code Online (Sandbox Code Playgroud)

settings.py我输入:

SECRET_KEY = os.environ['SECRET_KEY']
Run Code Online (Sandbox Code Playgroud)

此外,我测试了该应用程序正在运行,一切正常.

在我再次使用workon foobash中的命令开始处理项目后,我试图简单地运行服务器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'
Run Code Online (Sandbox Code Playgroud)

我已经读过这个变量应该在postactivate文件中设置.virtualenvs/foo/bin/,但那里什么都没有.

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

Dhi*_*aTN 8

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

echo 'export SECRET_KET=KJGH768&^jhgJg' >> /home/user/.virtualenvs/foo/bin/postactivate
Run Code Online (Sandbox Code Playgroud)

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

echo 'unset SECRET_KET' >> /home/user/.virtualenvs/foo/bin/predeactivate
Run Code Online (Sandbox Code Playgroud)