- #!/usr/bin/env bash
- # Summary: Configure the shell environment for pyenv-virtualenv
- # Usage: eval "$(pyenv virtualenv-init - [<shell>])"
- #
- # Automatically activates a Python virtualenv environment based on current
- # pyenv version.
- #
-
- set -e
- [ -n "$PYENV_DEBUG" ] && set -x
-
- resolve_link() {
- $(type -p greadlink readlink | head -1) "$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"
- }
-
- PYENV_VIRTUALENV_INSTALL_PREFIX="$(dirname "$(abs_dirname "$0")")"
-
- print=""
- for args in "$@"
- do
- if [ "$args" = "-" ]; then
- print=1
- shift
- fi
- done
-
- shell="${1:-$PYENV_SHELL}"
- if [ -z "$shell" ]; then
- shell="$(ps -p "$PPID" -o 'args=' 2>/dev/null || true)"
- shell="${shell##-}"
- shell="${shell%% *}"
- shell="${shell:-$SHELL}"
- shell="${shell##*/}"
- fi
-
- if [ -z "$print" ]; then
- case "$shell" in
- bash )
- profile='~/.bash_profile'
- ;;
- zsh )
- profile='~/.zshrc'
- ;;
- ksh )
- profile='~/.profile'
- ;;
- fish )
- profile='~/.config/fish/config.fish'
- ;;
- * )
- profile='your profile'
- ;;
- esac
-
- { echo "# Load pyenv-virtualenv automatically by adding"
- echo "# the following to ${profile}:"
- echo
- case "$shell" in
- fish )
- echo 'status --is-interactive; and source (pyenv virtualenv-init -|psub)'
- ;;
- * )
- echo 'eval "$(pyenv virtualenv-init -)"'
- ;;
- esac
- echo
- } >&2
-
- exit 1
- fi
-
- case "$shell" in
- fish )
- cat <<EOS
- set -gx PATH '${PYENV_VIRTUALENV_ROOT:-${PYENV_VIRTUALENV_INSTALL_PREFIX}}/shims' \$PATH;
- set -gx PYENV_VIRTUALENV_INIT 1;
- EOS
- ;;
- * )
- cat <<EOS
- export PATH="${PYENV_VIRTUALENV_ROOT:-${PYENV_VIRTUALENV_INSTALL_PREFIX}}/shims:\${PATH}";
- export PYENV_VIRTUALENV_INIT=1;
- EOS
- ;;
- esac
-
- case "$shell" in
- fish )
- cat <<EOS
- function _pyenv_virtualenv_hook --on-event fish_prompt;
- set -l ret \$status
- if [ -n "\$VIRTUAL_ENV" ]
- pyenv activate --quiet; or pyenv deactivate --quiet; or true
- else
- pyenv activate --quiet; or true
- end
- return \$ret
- end
- EOS
- ;;
- ksh )
- cat <<EOS
- function _pyenv_virtualenv_hook() {
- EOS
- ;;
- * )
- cat <<EOS
- _pyenv_virtualenv_hook() {
- EOS
- ;;
- esac
-
- if [[ "$shell" != "fish" ]]; then
- cat <<EOS
- local ret=\$?
- if [ -n "\$VIRTUAL_ENV" ]; then
- eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true
- else
- eval "\$(pyenv sh-activate --quiet || true)" || true
- fi
- return \$ret
- };
- EOS
-
- case "$shell" in
- bash )
- cat <<EOS
- if ! [[ "\$PROMPT_COMMAND" =~ _pyenv_virtualenv_hook ]]; then
- PROMPT_COMMAND="_pyenv_virtualenv_hook;\$PROMPT_COMMAND";
- fi
- EOS
- ;;
- zsh )
- cat <<EOS
- typeset -g -a precmd_functions
- if [[ -z \$precmd_functions[(r)_pyenv_virtualenv_hook] ]]; then
- precmd_functions=(_pyenv_virtualenv_hook \$precmd_functions);
- fi
- EOS
- ;;
- * )
- # FIXME: what should i do here??
- ;;
- esac
- fi
|