#!/usr/bin/env bash # # Summary: Activate virtual environment # # Usage: pyenv activate # pyenv activate --unset # # Activate a Python virtualenv environment in current shell. # This acts almost as same as `pyenv shell`, but this invokes the `activate` # script in your shell. # # should be a string matching a Python version known to pyenv. set -e [ -n "$PYENV_DEBUG" ] && set -x unset NOERROR unset VERBOSE while [ $# -gt 0 ]; do case "$1" in "--complete" ) # Provide pyenv completions echo --unset exec pyenv-virtualenvs --bare ;; "--no-error" ) NOERROR=1 ;; "--unset" ) echo "pyenv deactivate" exit ;; "--verbose" ) VERBOSE=1 ;; * ) break ;; esac shift 1 done no_shell= versions=("$@") if [ -z "${versions}" ]; then no_shell=1 OLDIFS="$IFS" IFS=: versions=($(pyenv-version-name)) IFS="$OLDIFS" fi if [ -z "${PYENV_VIRTUALENV_INIT}" ]; then # Backward compatibility issue # https://github.com/yyuu/pyenv-virtualenv/issues/26 no_shell= fi if [ "${#versions[@]}" -gt 1 ]; then [ -n "$NOERROR" ] || echo "pyenv-virtualenv: cannot activate multiple versions at once: ${versions[@]}" 1>&2 echo "false" exit 1 fi if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then [ -n "$NOERROR" ] || echo "pyenv-virtualenv: version \`${versions}' is not a virtualenv" 1>&2 echo "false" exit 1 fi shell="$(basename "${PYENV_SHELL:-$SHELL}")" case "$shell" in bash ) profile="$HOME/.bash_profile" ;; zsh ) profile="$HOME/.zshrc" ;; ksh ) profile="$HOME/.profile" ;; fish ) profile="$HOME/.config/fish/config.fish" ;; * ) profile="$HOME/.profile" ;; esac # Display setup instruction if 'pyenv virtualenv-init -' is not found in "$profile" if [ -f "$profile" ] && grep -q 'pyenv init -' "$profile" && ! grep -q 'pyenv virtualenv-init -' "$profile"; then pyenv-virtualenv-init >&2 || true fi if [ -n "$VERBOSE" ]; then echo "pyenv-virtualenv: activate ${versions}" 1>&2 fi if [ -z "$no_shell" ]; then echo "pyenv shell \"${versions}\";" # shell version set in pyenv-sh-activate should be unset # https://github.com/yyuu/pyenv-virtualenv/issues/61 case "$shell" in fish ) echo "setenv PYENV_ACTIVATE_SHELL 1;" ;; * ) echo "export PYENV_ACTIVATE_SHELL=1;" ;; esac fi prefix="$(pyenv-prefix "${versions}")" case "$shell" in fish ) cat <