1
0
Fork 0

Automatic virtualenv activaiion and deactivation, virtualenv non lazy

mode
pull/517-auto-virtualenv
Keerthan Jaic 11 years ago
parent 2ebdbdcff5
commit e3696d2c28

@ -61,6 +61,29 @@ system site-packages directory.
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
### Settings
#### Lazy loading
By default, virtualenvwrapper is loaded in lazy mode. This behaviour can be disabled adding the following line to *~/.zpreztorc*:
zstyle ':prezto:module:python' lazy_venv 'no'
#### Automatic virtualenv initialization
To enable autoenv, add the following line to *~/.zpreztorc*:
zstyle ':prezto:module:python' autoenv 'yes'
If a virtualenv is active, and was not activated by autoenv, then autoenv does nothing.
Otherwise, autoenv activated or deactivates a virtual environment whenever a directory is changed; based on the following priority:
1. Name specified in a file named *.venv* in the cwd.
2. *.venv* file in git root. If folder is inside git repository.
3. Name of git root folder.
4. No virtualenv.
Aliases Aliases
------- -------

@ -31,17 +31,66 @@ if (( ! $+commands[python] && ! $+commands[pyenv] )); then
return 1 return 1
fi fi
local venv_script=virtualenvwrapper
if zstyle -T ':prezto:module:python' lazy_venv; then
venv_script+=_lazy
fi
# Load virtualenvwrapper into the shell session. # Load virtualenvwrapper into the shell session.
if (( $+commands[virtualenvwrapper_lazy.sh] )); then if (( $+commands[$venv_script.sh] )); then
# Set the directory where virtual environments are stored. # Set the directory where virtual environments are stored.
export WORKON_HOME="$HOME/.virtualenvs" export WORKON_HOME="$HOME/.virtualenvs"
# Disable the virtualenv prompt. # Disable the virtualenv prompt.
VIRTUAL_ENV_DISABLE_PROMPT=1 VIRTUAL_ENV_DISABLE_PROMPT=1
source "$commands[virtualenvwrapper_lazy.sh]" source "$commands[$venv_script.sh]"
fi fi
function autoenv {
#Don't run in shell scripts etc.
if [[ $ZSH_SUBSHELL -ne 0 ]]; then
return
fi
#Don't run if currently in virtual env not set by autoenv
if (( ($+VIRTUAL_ENV) && !($+AUTOENV) )); then
return
fi
local name=""
if [[ -f .venv ]]; then
#.venv file in current dir gets highest priority
name=$(<.venv)
elif is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then
local gitroot="$(git rev-parse --show-toplevel 2> /dev/null)"
if [ -f "$gitroot/.venv" ]; then
#If there is a .venv file in gitroot
name=$(<$gitroot/.venv)
else
#Else use the name of the folder as venv name
name=$gitroot:t
fi
fi
local venv_name="$VIRTUAL_ENV:t"
if [[ $name != $venv_name ]]; then
if [[ -z $name ]]; then
deactivate && unset AUTOENV
return
fi
if [[ -d "$WORKON_HOME/$name" ]]; then
workon $name && export AUTOENV=1
return
fi
fi
}
if zstyle -T ':prezto:module:python' autoenv; then
add-zsh-hook chpwd autoenv
fi
# #
# Aliases # Aliases
# #

Loading…
Cancel
Save