首页 > 解决方案 > pyenv-virtualenv 中的环境变量

问题描述

我已经创建了一个pyenv virtualenv 3.5.9 projectname用于开发 django 项目的虚拟环境。

如何设置环境变量供我的代码使用?

我尝试/Users/developer/.pyenv/versions/projectname/bin/activate 像这样添加环境变量 DATABASE_USER:

export DATABASE_USER="dbuser"

当我试图echo $DATABASE_USER打印一个空字符串时。

尝试安装zsh-autoenv

现在我可以echo $DATABASE_USER获取在 .autoenv.zsh 文件中设置的值。

但我似乎无法让环境变量可用于我的 django 代码:

如果我尝试os.getenv('DATABASE_USER', '')在 virtualenv 内的 python shell 中,我得到''

有什么问题?zsh-autoenv 变量是否仅适用于 zsh shell 而不是python manage.py shell

标签: pythondjangovirtualenvpyenv

解决方案


我想知道类似的事情,我偶然发现了一个reddit 线程,其中有人问了同样的问题,并最终跟进了一些有趣的发现。

正如您所注意到的,pyenv似乎并没有实际使用该bin/activate文件。他们没有说激活方法是什么,但是像你一样,在那里添加环境变量没有产生任何结果。

最后,他们最终安装了autoenv,它自称是基于目录的环境。它允许您在目录中创建 .env 文件,当您cd进入该目录时,它会运行 .env 文件。您可以将它用于环境变量,或者您可以向其中添加任何其他内容。

我在 autoenv 页面上注意到他们说您可能应该使用direnv,因为它具有更好的功能并且是更高质量的软件。这些都不是 Python 或 pyenv 特定的,如果你从目录外部调用你的 python 代码,它们可能不起作用。由于您使用的是 pyenv,因此您可能无论如何都在目录中运行您的代码,所以我认为任何一个都可以工作。


推荐阅读