如果您正在使用virtualenvwrapper(我强烈建议这样做),您可以使用$VIRTUAL_ENV/bin/predeactivate中具有相同名称的脚本定义不同的挂钩(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/predeactivate。
$ 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