mirror of
https://github.com/pyenv/pyenv-virtualenv.git
synced 2025-11-09 20:13:54 -05:00
Allow activating first version of virtualenv even if there are multiple versions in pyenv (#105)
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
set -e
|
set -e
|
||||||
[ -n "$PYENV_DEBUG" ] && set -x
|
[ -n "$PYENV_DEBUG" ] && set -x
|
||||||
|
|
||||||
|
unset DEACTIVATE
|
||||||
unset QUIET
|
unset QUIET
|
||||||
unset VERBOSE
|
unset VERBOSE
|
||||||
|
|
||||||
@@ -24,6 +25,9 @@ while [ $# -gt 0 ]; do
|
|||||||
echo --unset
|
echo --unset
|
||||||
exec pyenv-virtualenvs --bare
|
exec pyenv-virtualenvs --bare
|
||||||
;;
|
;;
|
||||||
|
"--deactivate" )
|
||||||
|
DEACTIVATE=1
|
||||||
|
;;
|
||||||
"--no-error" | "--quiet" )
|
"--no-error" | "--quiet" )
|
||||||
QUIET=1
|
QUIET=1
|
||||||
;;
|
;;
|
||||||
@@ -56,30 +60,40 @@ if [ -z "${PYENV_VIRTUALENV_INIT}" ]; then
|
|||||||
no_shell=
|
no_shell=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${#versions[@]}" -gt 1 ]; then
|
venv="${versions}"
|
||||||
[ -n "$QUIET" ] || echo "pyenv-virtualenv: cannot activate multiple versions at once: ${versions[@]}" 1>&2
|
|
||||||
|
if ! pyenv-virtualenv-prefix "${venv}" 1>/dev/null 2>&1; then
|
||||||
|
if [ -z "$QUIET" ]; then
|
||||||
|
echo "pyenv-virtualenv: version \`${venv}' is not a virtualenv" 1>&2
|
||||||
|
fi
|
||||||
echo "false"
|
echo "false"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if pyenv-prefix "${versions}" 1>/dev/null 2>&1; then
|
# exit as error if there are multiple virtualenvs
|
||||||
if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then
|
# https://github.com/yyuu/pyenv-virtualenv/issues/105
|
||||||
[ -n "$QUIET" ] || echo "pyenv-virtualenv: version \`${versions}' is not a virtualenv" 1>&2
|
for version in "${versions[@]}"; do
|
||||||
|
if [[ "${version}" != "${venv}" ]]; then
|
||||||
|
if pyenv-virtualenv-prefix "${version}" 1>/dev/null 2>&1; then
|
||||||
|
if [ -z "$QUIET" ]; then
|
||||||
|
echo "pyenv-virtualenv: cannot activate multiple versions at once: ${versions[@]}" 1>&2
|
||||||
|
fi
|
||||||
echo "false"
|
echo "false"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
version="$(pyenv-version-name)"
|
|
||||||
versions="${version%/envs/*}/envs/${versions}"
|
|
||||||
if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then
|
|
||||||
[ -n "$QUIET" ] || echo "pyenv-virtualenv: version \`${versions}' is not an environment of anaconda/miniconda" 1>&2
|
|
||||||
echo "false"
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
done
|
||||||
|
|
||||||
shell="${PYENV_SHELL:-${SHELL##*/}}"
|
shell="${PYENV_SHELL:-${SHELL##*/}}"
|
||||||
prefix="$(pyenv-prefix "${versions}")"
|
prefix="$(pyenv-prefix "${venv}")"
|
||||||
|
|
||||||
|
if [[ "${VIRTUAL_ENV}" == "${prefix}" ]]; then
|
||||||
|
if [ -z "${QUIET}" ]; then
|
||||||
|
echo "pyenv-virtualenv: version \`${venv}' is already activated" 1>&2
|
||||||
|
fi
|
||||||
|
echo "true"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
# Display setup instruction, if pyenv-virtualenv has not been initialized.
|
# Display setup instruction, if pyenv-virtualenv has not been initialized.
|
||||||
# if 'pyenv virtualenv-init -' is not found in "$profile"
|
# if 'pyenv virtualenv-init -' is not found in "$profile"
|
||||||
@@ -87,36 +101,33 @@ if [ -z "$PYENV_VIRTUALENV_INIT" ]; then
|
|||||||
pyenv-virtualenv-init >&2 || true
|
pyenv-virtualenv-init >&2 || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "pyenv-virtualenv: activate ${versions}" 1>&2
|
if [ -n "${DEACTIVATE}" ]; then
|
||||||
|
pyenv-sh-deactivate ${QUIET+--quiet} ${VERBOSE+--verbose}
|
||||||
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
|
fi
|
||||||
|
|
||||||
case "${shell}" in
|
echo "pyenv-virtualenv: activate ${venv}" 1>&2
|
||||||
fish )
|
|
||||||
|
if [ -z "$no_shell" ]; then
|
||||||
|
# shell version set in pyenv-sh-activate should be unset
|
||||||
|
# https://github.com/yyuu/pyenv-virtualenv/issues/61
|
||||||
|
OLDIFS="$IFS"
|
||||||
|
IFS=:
|
||||||
|
case "$shell" in
|
||||||
|
fish )
|
||||||
cat <<EOS
|
cat <<EOS
|
||||||
set -e PYENV_DEACTIVATE;
|
setenv PYENV_VERSION "${versions[*]}";
|
||||||
setenv PYENV_ACTIVATE "${prefix}";
|
setenv PYENV_ACTIVATE_SHELL 1;
|
||||||
EOS
|
EOS
|
||||||
;;
|
;;
|
||||||
* )
|
* )
|
||||||
cat <<EOS
|
cat <<EOS
|
||||||
unset PYENV_DEACTIVATE;
|
export PYENV_VERSION="${versions[*]}";
|
||||||
export PYENV_ACTIVATE="${prefix}";
|
export PYENV_ACTIVATE_SHELL=1;
|
||||||
EOS
|
EOS
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
IFS="$OLDIFS"
|
||||||
|
fi
|
||||||
|
|
||||||
# virtualenv/pyvenv
|
# virtualenv/pyvenv
|
||||||
case "${shell}" in
|
case "${shell}" in
|
||||||
@@ -130,8 +141,8 @@ esac
|
|||||||
|
|
||||||
# anaconda/miniconda
|
# anaconda/miniconda
|
||||||
if [ -x "${prefix}/bin/conda" ]; then
|
if [ -x "${prefix}/bin/conda" ]; then
|
||||||
if [[ "${versions}" != "${versions%/envs/*}" ]]; then
|
if [[ "${venv}" != "${venv%/envs/*}" ]]; then
|
||||||
CONDA_DEFAULT_ENV="${versions##*/envs/}"
|
CONDA_DEFAULT_ENV="${venv##*/envs/}"
|
||||||
else
|
else
|
||||||
CONDA_DEFAULT_ENV="root"
|
CONDA_DEFAULT_ENV="root"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -27,51 +27,44 @@ while [ $# -gt 0 ]; do
|
|||||||
shift 1
|
shift 1
|
||||||
done
|
done
|
||||||
|
|
||||||
shell="$(basename "${PYENV_SHELL:-$SHELL}")"
|
if [ -z "${VIRTUAL_ENV}" ]; then
|
||||||
prefix="${VIRTUAL_ENV:-${PYENV_ACTIVATE}}"
|
if [ -z "$QUIET" ]; then
|
||||||
|
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2
|
||||||
if [ -z "${prefix}" ]; then
|
fi
|
||||||
[ -n "$QUIET" ] || echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2
|
|
||||||
echo "false"
|
echo "false"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
shell="$(basename "${PYENV_SHELL:-$SHELL}")"
|
||||||
|
prefix="${VIRTUAL_ENV}"
|
||||||
|
|
||||||
if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then
|
if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then
|
||||||
version="$(basename "${prefix%/envs/*}")/envs/${prefix##*/}"
|
venv="$(basename "${prefix%/envs/*}")/envs/${prefix##*/}"
|
||||||
else
|
else
|
||||||
version="${prefix##*/}"
|
venv="${prefix##*/}"
|
||||||
fi
|
fi
|
||||||
echo "pyenv-virtualenv: deactivate ${version}" 1>&2
|
|
||||||
|
echo "pyenv-virtualenv: deactivate ${venv}" 1>&2
|
||||||
|
|
||||||
if [ -n "${PYENV_ACTIVATE_SHELL}" ]; then
|
if [ -n "${PYENV_ACTIVATE_SHELL}" ]; then
|
||||||
# shell version set in pyenv-sh-activate should be unset
|
# shell version set in pyenv-sh-activate should be unset
|
||||||
# https://github.com/yyuu/pyenv-virtualenv/issues/61
|
# https://github.com/yyuu/pyenv-virtualenv/issues/61
|
||||||
echo "pyenv shell --unset;"
|
|
||||||
case "$shell" in
|
case "$shell" in
|
||||||
fish )
|
fish )
|
||||||
echo "set -e PYENV_ACTIVATE_SHELL;"
|
cat <<EOS
|
||||||
|
set -e PYENV_VERSION;
|
||||||
|
set -e PYENV_ACTIVATE_SHELL;
|
||||||
|
EOS
|
||||||
;;
|
;;
|
||||||
* )
|
* )
|
||||||
echo "unset PYENV_ACTIVATE_SHELL;"
|
cat <<EOS
|
||||||
|
unset PYENV_VERSION;
|
||||||
|
unset PYENV_ACTIVATE_SHELL;
|
||||||
|
EOS
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "${shell}" in
|
|
||||||
fish )
|
|
||||||
cat <<EOS
|
|
||||||
setenv PYENV_DEACTIVATE "$prefix";
|
|
||||||
set -e PYENV_ACTIVATE;
|
|
||||||
EOS
|
|
||||||
;;
|
|
||||||
* )
|
|
||||||
cat <<EOS
|
|
||||||
export PYENV_DEACTIVATE="$prefix";
|
|
||||||
unset PYENV_ACTIVATE;
|
|
||||||
EOS
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# virtualenv/pyvenv
|
# virtualenv/pyvenv
|
||||||
case "${shell}" in
|
case "${shell}" in
|
||||||
fish )
|
fish )
|
||||||
|
|||||||
@@ -104,15 +104,10 @@ fish )
|
|||||||
function _pyenv_virtualenv_hook --on-event fish_prompt;
|
function _pyenv_virtualenv_hook --on-event fish_prompt;
|
||||||
set -l ret \$status
|
set -l ret \$status
|
||||||
if [ -n "\$VIRTUAL_ENV" ]
|
if [ -n "\$VIRTUAL_ENV" ]
|
||||||
if [ "\$VIRTUAL_ENV" != (pyenv prefix 2>/dev/null; or true) ]
|
pyenv activate --deactivate --quiet; or pyenv deactivate --quiet; or true
|
||||||
pyenv deactivate --quiet; or true
|
|
||||||
pyenv activate --quiet; or true
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
if [ "\$PYENV_DEACTIVATE" != (pyenv prefix 2>/dev/null; or true) ]
|
|
||||||
pyenv activate --quiet; or true
|
pyenv activate --quiet; or true
|
||||||
end
|
end
|
||||||
end
|
|
||||||
return \$ret
|
return \$ret
|
||||||
end
|
end
|
||||||
EOS
|
EOS
|
||||||
@@ -133,15 +128,10 @@ if [[ "$shell" != "fish" ]]; then
|
|||||||
cat <<EOS
|
cat <<EOS
|
||||||
local ret=\$?
|
local ret=\$?
|
||||||
if [ -n "\$VIRTUAL_ENV" ]; then
|
if [ -n "\$VIRTUAL_ENV" ]; then
|
||||||
if [ "\$VIRTUAL_ENV" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
|
eval "\$(pyenv sh-activate --deactivate --quiet || pyenv sh-deactivate --quiet || true)" || true
|
||||||
eval "\$(pyenv sh-deactivate --quiet || true)" || true
|
|
||||||
eval "\$(pyenv sh-activate --quiet || true)" || true
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
if [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
|
|
||||||
eval "\$(pyenv sh-activate --quiet || true)" || true
|
eval "\$(pyenv sh-activate --quiet || true)" || true
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
return \$ret
|
return \$ret
|
||||||
};
|
};
|
||||||
EOS
|
EOS
|
||||||
|
|||||||
Reference in New Issue
Block a user