Um `cd` inteligente para o seu projeto Python

Eu uso virtualenve virtualenvwrappergerencio com meus projetos Python, mas trocar para um ambiente virtual diferente ao entrar nas pastas do projeto é enfadonho e fácil de esquecer, então redefino o cdcomando assim:

use_virtualenv() {
if [ -e .virtualenv ]; then
name
=$(cat .virtualenv)
if [ $VIRTUAL_ENV ]; then
if [ "$name" = "$(basename $VIRTUAL_ENV)" ]; then
return
fi
fi
workon $name

fi
}
cd
() {
builtin cd
"$@" && use_virtualenv
}

# Call the function on .zshrc loaded
use_virtualenv

Quando tenho um projeto que usa um ambiente virtual, por exemplo TORNADO, eu o gravo em um arquivo chamado .virtualenvna pasta raiz do projeto:

cd /my/project/folder
echo TORNADO
> .virtualenv

toda vez que eu entro nesta pasta por cd, o virtualenv será automaticamente trocado para TORNADO, nunca se preocupe em digitar workonnovamente = D

Nota. Este truque está funcionando apenas para zsh, se você estiver usando outros shells como o bash, altere o código para caber no seu.