我在ubuntu上有virtualenvwrapper
的问题。
我正在研究简单的Django项目foo
。我决定从SECRET_KEY
移动settings.py
并将其保存为环境变量。一切顺利:
在bash我进入了
export SECRET_KET=['...']
在settings.py
我输入了:
SECRET_KEY = os.environ['SECRET_KEY']
此外,我测试了该应用程序正在运行,一切正常。
但
我在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
的.virtualenvs/foo/bin/
文件中设置,但那里什么都没有。
幸运的是,这只是一个简单的测试项目,但是如何在使用virtualenvwrapper
时确保环境变量将保存在我的下一个virtualenv中?
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