python - virtualenvwrapper - 环境变量不保存

标签 python django python-3.x virtualenv virtualenvwrapper

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

关于python - virtualenvwrapper - 环境变量不保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47925819/

相关文章:

python - 如何使用 python gnupg 模块版本进行对称加密。 1.2.5?

python - 在 Python 中,如何使函数接受嵌入字符串中的一系列变量?

python - 音频不播放。 Django,DEBUG = False

python - 在应用程序模板中启用上下文处理器

python - Django 模板中的动态表单字段生成

c# - 我如何从 IronPython 中的公共(public)固定字节读取?

python - 将数据从Python列表和字典写入CSV

python - 如何使用 inex 对元组列表进行分组

python-3.x - Simplejson 错误 Python 3.3

python-3.x - 在 PySimpleGUI 的打开窗口顶部显示弹出窗口