virtualenvwrapper - 环境变量不保存

virtualenvwrapper - environment variables are not saving

我在 ubuntu 上遇到 virtualenvwrapper 的问题。

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

我在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'

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

幸运的是,这只是一个简单的测试项目,但我如何确保在使用 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