# Anaconda comes with binaries of system packages (e.g. `openssl`, `curl`). # Creating shims for those binaries will prevent pyenv users to run those # commands normally when not using Anaconda. # # This hooks is intended to skip creating shims for those executables. conda_exists() { shopt -s dotglob nullglob local condas=($(echo "${PYENV_ROOT}/versions/"*"/bin/conda" "${PYENV_ROOT}/versions/"*"/envs/"*"/bin/conda")) shopt -u dotglob nullglob [ -n "${condas}" ] } shims=() shopt -s nullglob for shim in $(cat "${BASH_SOURCE%/*}/conda.d/"*".list" | sort | uniq | sed -e 's/#.*$//' | sed -e '/^[[:space:]]*$/d'); do if [ -n "${shim##*/}" ]; then shims[${#shims[*]}]="${shim})return 0;;" fi done shopt -u nullglob eval "conda_shim(){ case \"\${1##*/}\" in ${shims[@]} *)return 1;;esac;}" # override `make_shims` to avoid conflict between pyenv-virtualenv's `envs.bash` # https://github.com/pyenv/pyenv-virtualenv/blob/v20160716/etc/pyenv.d/rehash/envs.bash make_shims() { local file shim for file do shim="${file##*/}" if ! conda_shim "${shim}" 1>&2; then register_shim "$shim" fi done } deregister_conda_shims() { # adapted for Bash 4.x's associative array (#1749) if declare -p registered_shims 2> /dev/null | grep -Eq '^(declare|typeset) -A'; then for shim in ${!registered_shims[*]}; do if conda_shim "${shim}" 1>&2; then unset registered_shims[${shim}] fi done else local shim local shims=() for shim in ${registered_shims}; do if ! conda_shim "${shim}" 1>&2; then shims[${#shims[*]}]="${shim}" fi done registered_shims=" ${shims[@]} " fi } if conda_exists; then deregister_conda_shims fi