#!/usr/bin/env bash set -e export -n CDPATH if [ "$1" = "--debug" ]; then export PYENV_DEBUG=1 shift fi if [ -n "$PYENV_DEBUG" ]; then export PS4='+ [${BASH_SOURCE##*/}:${LINENO}] ' set -x fi abort() { { if [ "$#" -eq 0 ]; then cat - else echo "pyenv: $*" fi } >&2 exit 1 } if enable -f "${BASH_SOURCE%/*}"/../libexec/pyenv-realpath.dylib realpath 2>/dev/null; then abs_dirname() { local path="$(realpath "$1")" echo "${path%/*}" } else [ -z "$PYENV_NATIVE_EXT" ] || abort "failed to load \`realpath' builtin" READLINK=$(type -p greadlink readlink | head -1) [ -n "$READLINK" ] || abort "cannot find readlink - are you missing GNU coreutils?" resolve_link() { $READLINK "$1" } abs_dirname() { local cwd="$PWD" local path="$1" while [ -n "$path" ]; do cd "${path%/*}" local name="${path##*/}" path="$(resolve_link "$name" || true)" done pwd cd "$cwd" } fi if [ -z "${PYENV_ROOT}" ]; then PYENV_ROOT="${HOME}/.pyenv" else PYENV_ROOT="${PYENV_ROOT%/}" fi export PYENV_ROOT # Transfer PYENV_FILE_ARG (from shims) into PYENV_DIR. if [ -z "${PYENV_DIR}" ]; then if [ -n "${PYENV_FILE_ARG}" ]; then if [ -L "${PYENV_FILE_ARG}" ]; then PYENV_DIR="$(abs_dirname "${PYENV_FILE_ARG}")" else PYENV_DIR="${PYENV_FILE_ARG%/*}" fi export PYENV_DIR unset PYENV_FILE_ARG fi fi if [ -z "${PYENV_DIR}" ]; then PYENV_DIR="$PWD" else cd "$PYENV_DIR" 2>/dev/null || abort "cannot change working directory to \`$PYENV_DIR'" PYENV_DIR="$PWD" cd "$OLDPWD" fi export PYENV_DIR shopt -s nullglob bin_path="$(abs_dirname "$0")" for plugin_bin in "${PYENV_ROOT}/plugins/"*/bin; do PATH="${plugin_bin}:${PATH}" done export PATH="${bin_path}:${PATH}" PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${PYENV_ROOT}/pyenv.d" if [ "${bin_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" fi PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:/usr/local/etc/pyenv.d:/etc/pyenv.d:/usr/lib/pyenv/hooks" for plugin_hook in "${PYENV_ROOT}/plugins/"*/etc/pyenv.d; do PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${plugin_hook}" done PYENV_HOOK_PATH="${PYENV_HOOK_PATH#:}" export PYENV_HOOK_PATH shopt -u nullglob command="$1" case "$command" in "" ) { pyenv---version pyenv-help } | abort ;; -v | --version ) exec pyenv---version ;; -h | --help ) exec pyenv-help ;; * ) command_path="$(command -v "pyenv-$command" || true)" [ -n "$command_path" ] || abort "no such command \`$command'" shift 1 if [ "$1" = --help ]; then exec pyenv-help "$command" else exec "$command_path" "$@" fi ;; esac