Source

vew / virtualenvwrapper_bashrc

#
# $Id$
#
# Shell functions to act as wrapper for Ian Bicking's virtualenv
# (http://pypi.python.org/pypi/virtualenv)
#

#
# Setup:
#
#  1. Add a line like "export WORKON_HOME=$HOME/.virtualenvs"
#     to your .bashrc.
#  2. Add a line like "source /path/to/this/file/virtualenvwrapper_bashrc"
#     to your .bashrc.
#  3. Run: source ~/.bashrc
#  4. Run: workon
#  5. A list of environments, empty, is printed.
#  6. Run: mkvirtualenv temp
#  7. Run: workon
#  8. This time, the "temp" environment is included.
#  9. Run: workon temp
# 10. The virtual environment is activated.
#

# Make sure there is a default value for WORKON_HOME.
# You can override this setting in your .bashrc.
if [ "$WORKON_HOME" = "" ]
then
    export WORKON_HOME="$HOME/.virtualenvs"
fi

# Verify that the WORKON_HOME directory exists
function verify_workon_home () {
    if [ ! -d "$WORKON_HOME" ]
    then
        echo "ERROR: Virtual environments directory '$WORKON_HOME' does not exist."
        return 1
    fi
    return 0
}

# Verify that the requested environment exists
function verify_workon_environment () {
       typeset env_name="$1"
       if [ ! -d "$WORKON_HOME/$env_name" ]
    then
       echo "ERROR: Environment '$env_name' does not exist. Create it with 'mkvirtualenv $env_name'."
       return 1
    fi
    return 0
}

# Create a new environment, in the WORKON_HOME.
#
# Usage: mkvirtualenv [options] ENVNAME
# (where the options are passed directly to virtualenv)
#
function mkvirtualenv () {
    verify_workon_home
    (cd "$WORKON_HOME"; virtualenv $*)
    workon "${@:-1}"
}

# Remove an environment, in the WORKON_HOME.
function rmvirtualenv () {
    typeset env_name="$1"
    verify_workon_home
    if ["$env_name" == "" ]
    then
        echo "Please specifiy an enviroment."
        return 1
    fi
    env_dir="$WORKON_HOME/$env_name"
    if [ "$VIRTUAL_ENV" == "$env_dir" ]
    then
        echo "ERROR: You cannot remove the active environment ('$env_name')."
        return 1
    fi
    rm -rf "$env_dir"
}

# List the available environments.
function show_workon_options () {
    verify_workon_home
	ls "$WORKON_HOME" | egrep -v '*.egg' | sort
}

# List or change working virtual environments
#
# Usage: workon [environment_name]
#
function workon () {
	typeset env_name="$1"
	if [ "$env_name" = "" ]
    then
        show_workon_options
        return 1
    fi

    verify_workon_home || return 1
    verify_workon_environment $env_name || return 1
    
    activate="$WORKON_HOME/$env_name/bin/activate"
    if [ ! -f "$activate" ]
    then
        echo "ERROR: Environment '$WORKON_HOME/$env_name' does not contain an activate script."
        return 1
    fi
    
    if [ -f "$VIRTUAL_ENV/bin/predeactivate" ]
    then
        source "$VIRTUAL_ENV/bin/predeactivate"
    fi
    
    source "$activate"
    
    if [ -f "$VIRTUAL_ENV/bin/postactivate" ]
    then
        source "$VIRTUAL_ENV/bin/postactivate"
    fi
	return 0
}

#
# Set up tab completion.  (Adapted from Arthur Koziel's version at 
# http://arthurkoziel.com/2008/10/11/virtualenvwrapper-bash-completion/)
# 
_virtualenvs ()
{
    local cur="${COMP_WORDS[COMP_CWORD]}"
    COMPREPLY=( $(compgen -W "`show_workon_options`" -- ${cur}) )
}

complete -o default -o nospace -F _virtualenvs workon
complete -o default -o nospace -F _virtualenvs rmvirtualenv
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.