我有一个 Heroku 项目,它使用环境变量来获取其配置,但我首先使用 virtualenv 在本地测试我的应用程序。
有没有办法在virtualenv里面设置远程机器上定义的环境变量?
最佳答案
如果您使用 virtualenvwrapper (我强烈建议这样做),您可以使用 $VIRTUAL_ENV/bin/
中的同名脚本定义不同的钩子(Hook)(preactivate、postactivate、predeactivate、postdeactivate)。你需要 postactivate 钩子(Hook)。
$ 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
如果您想将此配置保留在您的项目目录中,只需从您的项目目录创建一个符号链接(symbolic link)到 $VIRTUAL_ENV/bin/postactivate
。
$ rm $VIRTUAL_ENV/bin/postactivate
$ ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
你甚至可以automate the creation of the symlinks每次使用 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
关于python - 在 virtualenv 中设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9554087/