Autoenv will blow your mind, or at least the github page indicates as such. It's a *very* useful bit of software, but there are a few sharp edges to be aware of. The first is that every .env in the tree below your directory are executed on every cd. This means that a .env to deactivate your virtual env in a root project path will deactivate when you cd around inside of your project path, and then re-activate. This seems less then efficient to me, so below is my solution. We only deactivate when you cd into the workspaces environment and only activate when we cd into the project env.

workspaces/.env

BASE_PATH=`dirname "${BASH_SOURCE}"` 
PWD=`pwd`

if [[ "${BASE_PATH}" == "${PWD}" ]]
then
    declare -f -F deactivate &>/dev/null

    if [[ "${?}" == "0" ]]
    then
        deactivate
    fi
fi

workspaces/project/.env

BASE_PATH=`dirname "${BASH_SOURCE}"`
PWD=`pwd`

if [[ "${BASE_PATH}" == "${PWD}" ]]
then
    if [[ -e bin/activate ]]
    then
        source bin/activate
    fi
fi