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代码

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

可能是什么问题? zsh-autoenv变量仅可用于zsh shell,而不适用于python manage.py shell吗?

解决方法

我想知道类似的事情,我偶然发现了一个 reddit thread 其他人也问了同样的问题,最终 followed up 注意到了一些有趣的发现。

如您所见,pyenv 似乎并未实际使用 bin/activate 文件。他们没有说激活方法是什么,但和你一样,在那里添加环境变量没有结果。

最后,他们安装了 autoenv,它标榜自己是基于目录的环境。它允许你在你的目录中创建一个 .env 文件,当你 cd 到那个目录时,它运行 .env 文件。您可以将其用于环境变量,也可以向其中添加任何其他内容。

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