1
0
mirror of https://github.com/dcarrillo/prezto.git synced 2024-07-01 15:10:28 +00:00

[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.
This commit is contained in:
Indrajit Raychaudhuri 2017-08-17 22:53:25 -05:00
parent 5ffc8a07f1
commit 83ab314b77

View File

@ -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.