我有一个使用环境变量获取其配置的 Heroku 项目,但我首先使用 virtualenv 在本地测试我的应用程序。
有没有办法在 virtualenv 中设置远程机器上定义的环境变量?
原文由 Mahmoud Hanafy 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个使用环境变量获取其配置的 Heroku 项目,但我首先使用 virtualenv 在本地测试我的应用程序。
有没有办法在 virtualenv 中设置远程机器上定义的环境变量?
原文由 Mahmoud Hanafy 发布,翻译遵循 CC BY-SA 4.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 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答915 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
更新
截至 2017 年 5 月 17 日,autoenv 的自述文件指出 direnv 可能是更好的选择,并暗示 autoenv 不再维护。
旧答案
我写了 autoenv 来做到这一点:
https://github.com/kennethreitz/autoenv