python: Update pyenv initialization flow per pyenv 2.0

In pyenv 2.0 onwards, it is not enough anymore to initialize pyenv in
shell by just calling `pyenv init -`. We also need to update `path` to
include pyenv shims by calling `pyenv init --path`.

Also, honor `$PYENV_ROOT` if set but, no need to set it explicitly if
not set. Instead, let the initialization script take care of that.
This commit is contained in:
Indrajit Raychaudhuri 2021-05-24 17:31:17 -05:00 committed by Indrajit Raychaudhuri
parent f0942e6dda
commit afe59b293b
2 changed files with 19 additions and 8 deletions

View file

@ -38,7 +38,9 @@ execution of `pyenv`.
Install Python versions with `pyenv install` into _`~/.pyenv/versions`_.
This will be loaded automatically if pyenv is installed to `$PYENV_ROOT`,
_`~/.pyenv`_, or if the `pyenv` command is on the path.
_`~/.pyenv`_, or if the `pyenv` command is on the path. By default, `PYENV_ROOT`
is set to _`$HOME/.pyenv`_. You can set it to an alternate location and export
it in [_`${ZDOTDIR:-$HOME}/.zshenv`_][6].
## Local Package Installation

View file

@ -11,14 +11,21 @@
# Load dependencies.
pmodload 'helper'
# Load manually installed pyenv into the path
if [[ -s "${PYENV_ROOT:=$HOME/.pyenv}/bin/pyenv" ]]; then
path=("$PYENV_ROOT/bin" $path)
eval "$(pyenv init - --no-rehash zsh)"
# Load manually installed or package manager installed pyenv into the shell
# session.
if [[ -s "${local_pyenv::=${PYENV_ROOT:-$HOME/.pyenv}/bin/pyenv}" ]] \
|| (( $+commands[pyenv] )); then
# Load pyenv into the current python session
elif (( $+commands[pyenv] )); then
eval "$(pyenv init - --no-rehash zsh)"
# Ensure manually installed pyenv is added to path when present.
[[ -s $local_pyenv ]] && path=($local_pyenv:h $path)
# pyenv 2+ requires shims to be added to path before being initialized.
autoload -Uz is-at-least
if is-at-least 2 ${"$(pyenv --version 2>&1)"[(w)2]}; then
eval "$(pyenv init --path zsh)"
fi
eval "$(pyenv init - zsh)"
# Prepend PEP 370 per user site packages directory, which defaults to
# ~/Library/Python on macOS and ~/.local elsewhere, to PATH. The
@ -34,6 +41,8 @@ else
fi
fi
unset local_pyenv
# Return if requirements are not found.
if (( ! $#commands[(i)python[23]#] && ! $+functions[pyenv] )); then
return 1