virtualenvwrapper - 环境变量不保存

Posted

技术标签:

【中文标题】virtualenvwrapper - 环境变量不保存【英文标题】:virtualenvwrapper - environment variables are not saving 【发布时间】:2018-06-04 04:21:25 【问题描述】:

我在 ubuntu 上遇到了 virtualenvwrapper 的问题。

我正在开发简单的 Django 项目foo。我决定将SECRET_KEYsettings.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'

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

还好这只是一个简单的测试项目,但是当我使用virtualenvwrapper 时,如何确定环境变量会保存在我的下一个 virtualenv 中?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于virtualenvwrapper - 环境变量不保存的主要内容,如果未能解决你的问题,请参考以下文章

Linux 之 安装虚拟环境virtualenvwrapper

python虚拟环境管理包virtualenvwrapper

pip install virtualenv 和 virtualenvwrapper 时出现不支持的语言环境设置错误

virtualenvwrapper

独立python环境之virtualenv和virtualenvwrapper

virtualenvwrapper 虚拟环境的使用 和 python 安装源的更改