- #!/usr/bin/env bash
- # Summary: List all Python versions available to pyenv
- # Usage: pyenv versions [--bare]
- #
- # Lists all Python versions found in `$PYENV_ROOT/versions/*'.
-
- set -e
- [ -n "$PYENV_DEBUG" ] && set -x
-
- if [ "$1" = "--bare" ]; then
- hit_prefix=""
- miss_prefix=""
- current_versions=()
- include_system=""
- else
- hit_prefix="* "
- miss_prefix=" "
- OLDIFS="$IFS"
- IFS=: current_versions=($(pyenv-version-name || true))
- IFS="$OLDIFS"
- include_system="1"
- fi
-
- num_versions=0
-
- exists() {
- local car="$1"
- local cdar
- shift
- for cdar in "$@"; do
- if [ "${car}" == "${cdar}" ]; then
- return 0
- fi
- done
- return 1
- }
-
- print_version() {
- if exists "$1" "${current_versions[@]}"; then
- echo "${hit_prefix}$1 (set by $(pyenv-version-origin))"
- else
- echo "${miss_prefix}$1"
- fi
- num_versions=$((num_versions + 1))
- }
-
- # Include "system" in the non-bare output, if it exists
- if [ -n "$include_system" ] && PYENV_VERSION=system pyenv-which python >/dev/null 2>&1; then
- print_version system
- fi
-
- shopt -s nullglob
- for path in "${PYENV_ROOT}/versions/"*; do
- if [ -d "$path" ]; then
- print_version "${path##*/}"
- fi
- done
- shopt -u nullglob
-
- if [ "$num_versions" -eq 0 ] && [ -n "$include_system" ]; then
- echo "Warning: no Python detected on the system" >&2
- exit 1
- fi
|