En caso de que esté usando virtualenvwrapper (le recomiendo hacerlo), puede definir diferentes ganchos (preactivar, postactivar, predeactivar, posdeactivar) usando los scripts con los mismos nombres $VIRTUAL_ENV/bin/
. Necesita el gancho 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
Si desea mantener esta configuración en el directorio de su proyecto, simplemente cree un enlace simbólico desde su directorio de proyecto $VIRTUAL_ENV/bin/postactivate
.
$ rm $VIRTUAL_ENV/bin/postactivate
$ ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
Incluso podría automatizar la creación de los enlaces simbólicos cada vez que use mkvirtualenv .
Limpieza al desactivar
Recuerde que esto no se limpiará después de sí mismo. Cuando desactive virtualenv, la variable de entorno persistirá. Para limpiar simétricamente puede agregar a $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
Recuerde que si usa esto para las variables de entorno que ya podrían estar configuradas en su entorno, entonces el desarmado resultará en que estén completamente desarmadas al abandonar virtualenv. Entonces, si eso es probable, podría registrar el valor anterior en algún lugar temporal y luego volver a leerlo en desactivar.
Preparar:
$ 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
Prueba:
$ echo $SOME_VAR
banana
$ workon myenv
$ echo $SOME_VAR
apple
$ deactivate
$ echo $SOME_VAR
banana