diff --git a/libexec/pyenv b/libexec/pyenv index a4b0c3ae..40c763d2 100755 --- a/libexec/pyenv +++ b/libexec/pyenv @@ -76,23 +76,27 @@ export PYENV_DIR shopt -s nullglob -bin_path="$(abs_dirname "$0")" -for plugin_bin in "${bin_path%/*}"/plugins/*/bin; do +PYENV_INSTALL_PATH="$(abs_dirname "$0")" +PYENV_INSTALL_PATH="${PYENV_INSTALL_PATH%/*}" + +export PYENV_INSTALL_PATH + +for plugin_bin in "${PYENV_INSTALL_PATH}"/plugins/*/bin; do PATH="${plugin_bin}:${PATH}" done # PYENV_ROOT can be set to anything, so it may happen to be equal to the base path above, # resulting in duplicate PATH entries -if [ "${bin_path%/*}" != "$PYENV_ROOT" ]; then +if [ "${PYENV_INSTALL_PATH}" != "$PYENV_ROOT" ]; then for plugin_bin in "${PYENV_ROOT}"/plugins/*/bin; do PATH="${plugin_bin}:${PATH}" done fi -export PATH="${bin_path}:${PATH}" +export PATH="${PYENV_INSTALL_PATH}/libexec:${PATH}" PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${PYENV_ROOT}/pyenv.d" -if [ "${bin_path%/*}" != "$PYENV_ROOT" ]; then +if [ "${PYENV_INSTALL_PATH}" != "$PYENV_ROOT" ]; then # Add pyenv's own `pyenv.d` unless pyenv was cloned to PYENV_ROOT - PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${bin_path%/*}/pyenv.d" + PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${PYENV_INSTALL_PATH}/pyenv.d" fi PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:/usr/etc/pyenv.d:/usr/local/etc/pyenv.d:/etc/pyenv.d:/usr/lib/pyenv/hooks" for plugin_hook in "${PYENV_ROOT}/plugins/"*/etc/pyenv.d; do diff --git a/libexec/pyenv-exec b/libexec/pyenv-exec index 6ed5ac20..33de574e 100755 --- a/libexec/pyenv-exec +++ b/libexec/pyenv-exec @@ -31,6 +31,7 @@ fi PYENV_COMMAND_PATH="$(pyenv-which "$PYENV_COMMAND")" PYENV_BIN_PATH="${PYENV_COMMAND_PATH%/*}" + export PYENV_VERSION OLDIFS="$IFS" diff --git a/libexec/pyenv-init b/libexec/pyenv-init index 6341b655..cff9a557 100755 --- a/libexec/pyenv-init +++ b/libexec/pyenv-init @@ -241,7 +241,7 @@ function print_env() { } function print_completion() { - completion="${0%/*/*}/completions/pyenv.${shell}" + completion="${PYENV_INSTALL_PATH}/completions/pyenv.${shell}" if [ -r "$completion" ]; then echo "source '$completion'" fi diff --git a/plugins/python-build/bin/pyenv-install b/plugins/python-build/bin/pyenv-install index 778489b7..68705641 100755 --- a/plugins/python-build/bin/pyenv-install +++ b/plugins/python-build/bin/pyenv-install @@ -256,7 +256,6 @@ for DEFINITION in "${DEFINITIONS[@]}"; do # Display a more helpful message if the definition wasn't found. if [ "$STATUS" == "2" ]; then { candidates="$(definitions "$DEFINITION")" - here="$(dirname "${0%/*}")/../.." if [ -n "$candidates" ]; then echo echo "The following versions contain \`$DEFINITION' in the name:" @@ -266,12 +265,12 @@ for DEFINITION in "${DEFINITIONS[@]}"; do echo "See all available versions with \`pyenv install --list'." echo echo -n "If the version you need is missing, try upgrading pyenv" - if [ "$here" != "${here#$(brew --prefix 2>/dev/null)}" ]; then + if [ "${PYENV_INSTALL_PATH}" != "${PYENV_INSTALL_PATH#$(brew --prefix 2>/dev/null)}" ]; then printf ":\n\n" echo " brew update && brew upgrade pyenv" - elif [ -d "${here}/.git" ]; then + elif [ -d "${PYENV_INSTALL_PATH}/.git" ]; then printf ":\n\n" - echo " cd ${here} && git pull && cd -" + echo " cd ${PYENV_INSTALL_PATH} && git pull && cd -" else printf ".\n" fi diff --git a/plugins/python-build/test/pyenv.bats b/plugins/python-build/test/pyenv.bats index f3b3c617..7e4032aa 100644 --- a/plugins/python-build/test/pyenv.bats +++ b/plugins/python-build/test/pyenv.bats @@ -140,7 +140,8 @@ OUT stub_python_build 'echo ERROR >&2 && exit 2' stub_python_build "--definitions : echo 2.6.9 2.7.9-rc1 2.7.9-rc2 3.4.2 | tr ' ' $'\\n'" - run pyenv-install 2.7.9 + mkdir "$BATS_TEST_TMPDIR/.git" + PYENV_INSTALL_PATH="$BATS_TEST_TMPDIR" run pyenv-install 2.7.9 assert_failure assert_output <&2 && exit 2' \ "--definitions : true" - run pyenv-install 1.9.3 + PYENV_INSTALL_PATH="$BATS_TEST_TMPDIR" run pyenv-install 1.9.3 assert_failure assert_output <