#!/usr/bin/env bash # # Summary: Uninstall a specific Python version # # Usage: pyenv uninstall [-f|--force] # # -f Attempt to remove the specified version without prompting # for confirmation. If the version does not exist, do not # display an error message. # # See `pyenv versions` for a complete list of installed versions. # set -e # Provide pyenv completions if [ "$1" = "--complete" ]; then exec pyenv versions --bare fi usage() { # We can remove the sed fallback once pyenv 0.4.0 is widely available pyenv-help uninstall 2>/dev/null || sed -ne '/^#/!q;s/.//;s/.//;1,4d;p' < "$0" [ -z "$1" ] || exit "$1" } if [ -z "$PYENV_ROOT" ]; then PYENV_ROOT="${HOME}/.pyenv" fi if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then usage 0 fi unset FORCE if [ "$1" = "-f" ] || [ "$1" = "--force" ]; then FORCE=true shift fi [ "$#" -eq 1 ] || usage 1 >&2 DEFINITION="$1" case "$DEFINITION" in "" | -* ) usage 1 >&2 ;; esac declare -a before_hooks after_hooks before_uninstall() { local hook="$1" before_hooks["${#before_hooks[@]}"]="$hook" } after_uninstall() { local hook="$1" after_hooks["${#after_hooks[@]}"]="$hook" } OLDIFS="$IFS" IFS=$'\n' scripts=(`pyenv-hooks uninstall`) IFS="$OLDIFS" for script in "${scripts[@]}"; do source "$script"; done VERSION_NAME="${DEFINITION##*/}" PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}" if [ -z "$FORCE" ]; then if [ ! -d "$PREFIX" ]; then echo "pyenv: version \`$VERSION_NAME' not installed" >&2 exit 1 fi read -p "pyenv: remove $PREFIX? " case "$REPLY" in y* | Y* ) ;; * ) exit 1 ;; esac fi for hook in "${before_hooks[@]}"; do eval "$hook"; done if [ -d "$PREFIX" ]; then rm -rf "$PREFIX" pyenv-rehash fi for hook in "${after_hooks[@]}"; do eval "$hook"; done