jhldiq
Last Updated: February 25, 2016
·
187
· diasjorge
84687433fbeed3d44d0298b7032f9780

Integrating rvm with virtualenv

If you want to activate the virtualenv for your project when you change directories you can leverage rvm to do it.

Just execute the following:

touch ~/.rvm/hooks/after_cd_virtualenv
chmod +x ~/.rvm/hooks/after_cd_virtualenv

Then edit the file and paste this content:

#!/usr/bin/env bash

# Automatically activate Git projects' virtual environments based on the
# directory name of the project. Virtual environment name can be overridden
# by placing a .venv file in the project root with a virtualenv name in it
function workon_cwd {
    # Check that this is a Git repo
    GIT_DIR=`git rev-parse --git-dir 2> /dev/null`
    if [ $? == 0 ]; then
        if [ $GIT_DIR == ".git" ]; then
           PROJECT_ROOT=$PWD
        else
            PROJECT_ROOT=`dirname "$GIT_DIR"`
        fi
        ENV_NAME=`basename "$PROJECT_ROOT"`
        if [ -f "$PROJECT_ROOT/.venv" ]; then
            ENV_NAME=`cat "$PROJECT_ROOT/.venv"`
        fi
        # Activate the environment only if it is not already active
        if [ "$VIRTUAL_ENV" != "$WORKON_HOME/$ENV_NAME" ]; then
            if [ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]; then
                workon "$ENV_NAME" -n && export CD_VIRTUAL_ENV="$ENV_NAME"
            fi
        fi
    elif [ $CD_VIRTUAL_ENV ]; then
        # We've just left the repo, deactivate the environment
        # Note: this only happens if the virtualenv was activated automatically
        deactivate && unset CD_VIRTUAL_ENV
    fi
}

workon_cwd

Now whenever you change to the directory it will look for a .venv file and use the content as the name, if it does not exist it will use the directory name of git root. If there's a virtualenv with that name then it will be activated.

Say Thanks
Respond