Permalink
Browse files

Adding virtualenv_wrapper helper script.

Adding has_virtualenv function which will look for a .venv file in the
directory. If it exists, it will attempt to `workon` the project whose
name is written in the file.

For instance, if my .venv file contains the text:

oebfare

It will attempt to `workon oebfare`. As there shouldn't be a .venv
file in a directory that doesn't have a virtual env, there is no error
handling. This should be fixed.
  • Loading branch information...
justinabrahms committed Mar 29, 2009
1 parent a98ae22 commit 04899f005397499e89da6d562b062545e70d7975
Showing with 9 additions and 0 deletions.
  1. +9 −0 .bash_profile
@@ -222,6 +222,15 @@ PS1="${RED}:${NORMAL}\@${RED}: ${CYAN}(${NORMAL}\w${CYAN})${GREEN} \$(parse_svn_
source $HOME/bin/virtualenvwrapper_bashrc
has_virtualenv() {
if [ -e .venv ]; then
workon `cat .venv`
fi
}
venv_cd () {
cd "$@" && has_virtualenv

This comment has been minimized.

@dorkitude

dorkitude Jul 2, 2012

This is dangerous because, if you put this in your bashrc and source it more than once, it'll create an infinite loop -- alias cd will call a function that hits the alias cd.

I fixed this by using:

builtin cd inside the venv_cd function

This comment has been minimized.

@cjerdonek

cjerdonek Nov 19, 2013

I created a gist for this snippet here with @dorkitude's suggested change and some other minor modifications.

This comment has been minimized.

@bsgreenb

bsgreenb May 9, 2014

What up @dorkitude great minds think alike

This comment has been minimized.

@scharron

scharron Sep 24, 2014

To avoid messing with builtins, you can also use the PROMPT_COMMAND from bash.

PROMPT_COMMAND='prompt'

function prompt()
{
  if [ "$PWD" != "$MYOLDPWD" ]; then
    MYOLDPWD="$PWD"
    test -e .venv && workon `cat .venv`
  fi
}

This comment has been minimized.

@jessedhillon

jessedhillon Mar 22, 2015

@scharron has the right answer. The current script won't work with popd and pushd.

This comment has been minimized.

@justinabrahms

justinabrahms May 18, 2015

Owner

Thanks guys. I added a note in the original post with thank yous. Thank you all!

New source:
https://justin.abrah.ms/dotfiles/zsh.html#sec-2-7

This comment has been minimized.

This comment has been minimized.

@cjerdonek

cjerdonek Dec 23, 2015

FYI, if you haven't yet, I would take a look at pyenv / pyenv-virtualenv. It supersedes the need for doing this by automatically checking for a .python-version file. I've been really happy with it.

This comment has been minimized.

@afeld

afeld Sep 19, 2016

I went a step further than @scharron's suggestion, and made a script that assumes you will want a virtual environment anytime you are in a directory with a requirements.txt file.

https://gist.github.com/afeld/4aefc7c9493f1519e141f52b40dc6479

Would love feedback!

}
alias cd="venv_cd"
# Welcome Message
echo -e ""

1 comment on commit 04899f0

@cjerdonek

This comment has been minimized.

cjerdonek commented on 04899f0 Dec 28, 2015

Also, so that you don't override Mac OS X's behavior of preserving the current working directory when opening a new terminal window (or any other existing prompt behavior), it looks like you want to replace:

PROMPT_COMMAND='prompt'

with:

export PROMPT_COMMAND="${PROMPT_COMMAND};prompt"
Please sign in to comment.