在 virtualenv 中设置环境变量

新手上路,请多包涵

我有一个使用环境变量获取其配置的 Heroku 项目,但我首先使用 virtualenv 在本地测试我的应用程序。

有没有办法在 virtualenv 中设置远程机器上定义的环境变量?

原文由 Mahmoud Hanafy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 337
2 个回答

更新

截至 2017 年 5 月 17 日,autoenv 的自述文件指出 direnv 可能是更好的选择,并暗示 autoenv 不再维护。

旧答案

我写了 autoenv 来做到这一点:

https://github.com/kennethreitz/autoenv

原文由 Kenneth Reitz 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用的是 virtualenvwrapper (我强烈建议这样做),您可以使用 $VIRTUAL_ENV/bin/ 中具有相同名称的脚本来定义不同的挂钩(preactivate、postactivate、predeactivate、postdeactivate)。您需要 postactivate 挂钩。

 $ workon myvenv

$ cat $VIRTUAL_ENV/bin/postactivate
#!/bin/bash
# This hook is run after this virtualenv is activated.
export DJANGO_DEBUG=True
export S3_KEY=mykey
export S3_SECRET=mysecret

$ echo $DJANGO_DEBUG
True

如果您想将此配置保留在项目目录中,只需创建一个从项目目录到 $VIRTUAL_ENV/bin/postactivate 的符号链接。

 $ rm $VIRTUAL_ENV/bin/postactivate
$ ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate

您甚至可以在每次使用 mkvirtualenv自动创建符号链接

清理停用

请记住,这不会自行清理。当您停用 virtualenv 时,环境变量将保留。要对称清理,您可以添加到 $VIRTUAL_ENV/bin/predeactivate

 $ cat $VIRTUAL_ENV/bin/predeactivate
#!/bin/bash
# This hook is run before this virtualenv is deactivated.
unset DJANGO_DEBUG

$ deactivate

$ echo $DJANGO_DEBUG

请记住,如果将此用于可能已在您的环境中设置的环境变量,则取消设置将导致它们在离开 virtualenv 时完全取消设置。因此,如果这完全有可能,您可以将以前的值临时记录在某个地方,然后在停用时将其读回。

设置:

 $ cat $VIRTUAL_ENV/bin/postactivate
#!/bin/bash
# This hook is run after this virtualenv is activated.
if [[ -n $SOME_VAR ]]
then
    export SOME_VAR_BACKUP=$SOME_VAR
fi
export SOME_VAR=apple

$ cat $VIRTUAL_ENV/bin/predeactivate
#!/bin/bash
# This hook is run before this virtualenv is deactivated.
if [[ -n $SOME_VAR_BACKUP ]]
then
    export SOME_VAR=$SOME_VAR_BACKUP
    unset SOME_VAR_BACKUP
else
    unset SOME_VAR
fi

测试:

 $ echo $SOME_VAR
banana

$ workon myenv

$ echo $SOME_VAR
apple

$ deactivate

$ echo $SOME_VAR
banana

原文由 Danilo Bargen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏