Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save RafaAguilar/868a687d2cc5f904f36b2122deb5c95b to your computer and use it in GitHub Desktop.
Save RafaAguilar/868a687d2cc5f904f36b2122deb5c95b to your computer and use it in GitHub Desktop.
virtualenv-auto-activate
#!/bin/bash
# Based on virtualenv-auto-activate.sh
# Source: https://gist.github.com/codysoyland/2198913
#
# Installation:
# Add this line to your .bashrc or .bash-profile:
#
# source /path/to/virtualenv-auto-activate.sh
#
# As a difference with the original, this script will look
# the virtualen in a sibling folder of the project's folder:
# For example:
# project3
# ├── .git
# │ ├── HEAD
# │ ├── config
# │ ├── description
# │ ├── hooks
# │ ├── info
# │ ├── objects
# │ └── refs
# virtualenvs
# ├── project1
# ├── project2
# └── project3
# ├── bin
# ├── include
# └── lib
#
# The virtualenv will be activated automatically when you enter the directory,
# and it will deactivate when you go on a upper directory from project's root dir.
contains() {
root_path="$PROJECT_PATH"
current_path="`pwd`"
if echo "$current_path" | grep -q "$root_path"
then
:
else
echo Deactivating virtualenv
deactivate
fi
}
_virtualenv_auto_activate() {
VIRTUALENVS_FOLDERS_NAME='virtualenvs'
PROJECT_ROOT_PATH=$(dirname `pwd`)
PROJECT_NAME=$(basename `pwd`)
if [ -e ".git" ]; then
# Check to see if already activated to avoid redundant activating
if [ "$VIRTUAL_ENV" != "$PROJECT_ROOT_PATH/$VIRTUALENVS_FOLDERS_NAME/$PROJECT_NAME" ]; then
echo Activating virtualenv \"$PROJECT_NAME\"...
source $PROJECT_ROOT_PATH/$VIRTUALENVS_FOLDERS_NAME/$PROJECT_NAME/bin/activate
export PROJECT_PATH=`echo $PROJECT_ROOT_PATH/$PROJECT_NAME`
fi
else
if [ -z ${VIRTUAL_ENV+x} ]
then
:
else
contains
fi
fi
}
export PROMPT_COMMAND=_virtualenv_auto_activate
# precmd() { eval "$PROMPT_COMMAND" } # Uncomment to use it with ZSH
@RafaAguilar
Copy link
Author

Tested on bash v4.3 and zsh v5.1

@RafaAguilar
Copy link
Author

It supports auto-deactivate from revision #6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment