Browse Source

[python] Refine pyenv based virtualenv management

Now that pyenv plugins availability is detected by directly probing
'pyenv', we need to rely on the same mechanism consistently.

Further, we perform available pyenv plugin scan with native zsh
techniques instead of relying on external commands.
master
Indrajit Raychaudhuri 7 years ago
parent
commit
83ab314b77
  1. 27
      modules/python/init.zsh

27
modules/python/init.zsh

@ -92,18 +92,25 @@ if (( $+VIRTUALENVWRAPPER_VIRTUALENV || $+commands[virtualenv] )) && \
# Disable the virtualenv prompt. # Disable the virtualenv prompt.
VIRTUAL_ENV_DISABLE_PROMPT=1 VIRTUAL_ENV_DISABLE_PROMPT=1
# Enable 'virtualenv' with 'pyenv'. # Create a sorted array of available virtualenv related 'pyenv' commands to
if (( $+commands[pyenv] )) && \ # look for plugins of interest. Scanning shell '$path' isn't enough as they
pyenv commands | command grep -q virtualenv-init # can exist in 'pyenv' synthesized paths (e.g., '~/.pyenv/plugins') instead.
then local -a pyenv_plugins
if (( $+commands[pyenv] )); then
pyenv_plugins=(${(@oM)${(f)"$(pyenv commands --no-sh 2>/dev/null)"}:#virtualenv*})
fi
if (( $pyenv_plugins[(i)virtualenv-init] <= $#pyenv_plugins )); then
# Enable 'virtualenv' with 'pyenv'.
eval "$(pyenv virtualenv-init -)" eval "$(pyenv virtualenv-init -)"
# Optionall activate 'virtualenvwrapper' with 'pyenv' is available.
if (( $#commands[(i)pyenv-virtualenvwrapper(_lazy|)] )); then # Optionally activate 'virtualenvwrapper' plugin when available.
pyenv "${${(@O)commands[(I)pyenv-virtualenvwrapper(_lazy|)]}[1]#pyenv-}" if (( $pyenv_plugins[(i)virtualenvwrapper(_lazy|)] <= $#pyenv_plugins )); then
pyenv "$pyenv_plugins[(R)virtualenvwrapper(_lazy|)]"
fi fi
else else
# Fallback to 'virtualenvwrapper' without 'pyenv' wrapper in '$path' # Fallback to 'virtualenvwrapper' without 'pyenv' wrapper if available
# and other known locations on a Debian based system. # in '$path' or in an alternative location on a Debian based system.
virtenv_sources=( virtenv_sources=(
${(@Ov)commands[(I)virtualenvwrapper(_lazy|).sh]} ${(@Ov)commands[(I)virtualenvwrapper(_lazy|).sh]}
/usr/share/virtualenvwrapper/virtualenvwrapper(_lazy|).sh(OnN) /usr/share/virtualenvwrapper/virtualenvwrapper(_lazy|).sh(OnN)
@ -114,6 +121,8 @@ if (( $+VIRTUALENVWRAPPER_VIRTUALENV || $+commands[virtualenv] )) && \
unset virtenv_sources unset virtenv_sources
fi fi
unset pyenv_plugins
fi fi
# Load PIP completion. # Load PIP completion.

Loading…
Cancel
Save