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 .