Embora essa resposta não se aplique diretamente ao virtualenv usage - que tal usar virtualenvwrapper ? É basicamente virtualenv em esteróides, cuidando do gerenciamento de envs. Uma vez instalado, você recebe um conjunto de comandos adicionais:
-
workon lista todos os ambientes disponíveis quando chamado sem argumentos e ativa o env quando chamado com nome de env como um argumento, por exemplo workon myenv ativa o env myenv ;
-
mkvirtualenv myenv cria um novo env myenv ;
-
rmvirtualenv myenv remove.
Mas há mais - virtualenvwrapper define um conjunto de ganchos úteis onde você pode implementar sua própria lógica para personalização de envs, por exemplo:
-
premkvirtualenv é executado quando um env é criado, mas ainda não é ativado;
-
postmkvirtualenv é executado quando um env é criado e ativado;
-
preactivate é executado quando uma ativação env foi acionada;
-
postactivate é executado quando um env foi ativado;
-
predeactivate é executado quando uma desativação env foi acionada;
-
postdeactivate é executado quando um env foi desativado;
e muito mais. Por exemplo, eu tenho um gancho postmkvirtualenv que instala ipython em um novo env:
$ cat $VIRTUALENVWRAPPER_HOOK_DIR/postmkvirtualenv
#!/bin/bash
# This hook is sourced after a new virtualenv is activated.
env=$(basename "$VIRTUAL_ENV")
logger -s -t "($env)" "installing ipython ..."
"$VIRTUAL_ENV/bin/pip" install ipython --quiet
Para definir lógica adicional para a desativação de env, você teria que escrever um script bash personalizado e colocar seu conteúdo em $VIRTUALENVWRAPPER_HOOK_DIR/predeactivate (se você precisar executar suas coisas enquanto o env ainda estiver ativado) ou $VIRTUALENVWRAPPER_HOOK_DIR/postdeactivate (se você precisar que o env seja desativado para executar o código personalizado).
Para referência: virtualenvwrapper docs .
Para obter uma lista completa dos ganchos, consulte a Personalização por usuário .