mirror of
https://github.com/pyenv/pyenv-virtualenv.git
synced 2025-11-10 20:43:55 -05:00
add foolproof for -p argument.
find proper source version from pyenv if the given executable is only basename or is a shim script.
This commit is contained in:
@@ -318,10 +318,29 @@ if [ -n "${USE_PYVENV}" ]; then
|
||||
# Unset some arguments not supported by pyvenv
|
||||
unset QUIET
|
||||
unset VERBOSE
|
||||
if [ -n "${VIRTUALENV_PYTHON}" ]; then
|
||||
echo "pyenv-virtualenv: \`--python=${VIRTUALENV_PYTHON}' is not supported by pyvenv." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if [ -n "${VIRTUALENV_PYTHON}" ]; then
|
||||
if [[ "${VIRTUALENV_PYTHON}" == "${VIRTUALENV_PYTHON##*/}" ]] || [[ "${VIRTUALENV_PYTHON}" == "${PYENV_ROOT}/shims/"* ]]; then
|
||||
python="$(pyenv-which "${VIRTUALENV_PYTHON##*/}" 2>/dev/null || true)"
|
||||
if [ -x "${python}" ]; then
|
||||
VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--python=${python}"
|
||||
else
|
||||
python="$(PYENV_VERSION="$(pyenv-whence "${VIRTUALENV_PYTHON##*/}" 2>/dev/null | tail -n 1 || true)" pyenv-which "${VIRTUALENV_PYTHON##*/}" 2>/dev/null || true)"
|
||||
if [ -x "${python}" ]; then
|
||||
VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--python=${python}"
|
||||
else
|
||||
echo "pyenv-virtualenv: \`${VIRTUALENV_PYTHON##*/}' is not installed in pyenv." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--python=${VIRTUALENV_PYTHON}"
|
||||
fi
|
||||
fi
|
||||
if [ -z "${HAS_VIRTUALENV}" ]; then
|
||||
VIRTUALENV_VERSION="==${VIRTUALENV_VERSION}"
|
||||
pyenv-exec pip install $QUIET $VERBOSE "virtualenv${VIRTUALENV_VERSION%==}"
|
||||
|
||||
101
test/python.bats
Normal file
101
test/python.bats
Normal file
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export PYENV_ROOT="${TMP}/pyenv"
|
||||
export PYENV_VERSION="2.7.8"
|
||||
create_executable "${PYENV_VERSION}" "virtualenv"
|
||||
remove_executable "${PYENV_VERSION}" "pyvenv"
|
||||
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
|
||||
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
|
||||
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
|
||||
stub pyenv-hooks "virtualenv : echo"
|
||||
stub pyenv-rehash " : true"
|
||||
stub pyenv-version-name "echo \${PYENV_VERSION}"
|
||||
stub curl true
|
||||
}
|
||||
|
||||
teardown() {
|
||||
unstub curl
|
||||
unstub pyenv-version-name
|
||||
unstub pyenv-prefix
|
||||
unstub pyenv-hooks
|
||||
unstub pyenv-rehash
|
||||
rm -fr "$TMP"/*
|
||||
}
|
||||
|
||||
@test "resolve python executable from enabled version" {
|
||||
remove_executable "2.7.7" "python2.7"
|
||||
create_executable "2.7.8" "python2.7"
|
||||
remove_executable "2.7.9" "python2.7"
|
||||
|
||||
stub pyenv-exec "virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.8/bin/python2.7 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "python -s -m ensurepip : true"
|
||||
stub pyenv-which "python2.7 : echo ${PYENV_ROOT}/versions/2.7.8/bin/python2.7"
|
||||
|
||||
run pyenv-virtualenv --verbose --python=python2.7 venv
|
||||
|
||||
assert_output <<OUT
|
||||
PYENV_VERSION=2.7.8 virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.8/bin/python2.7 ${PYENV_ROOT}/versions/venv
|
||||
OUT
|
||||
assert_success
|
||||
|
||||
unstub pyenv-which
|
||||
unstub pyenv-exec
|
||||
|
||||
remove_executable "2.7.7" "python2.7"
|
||||
remove_executable "2.7.8" "python2.7"
|
||||
remove_executable "2.7.9" "python2.7"
|
||||
}
|
||||
|
||||
@test "resolve python executable from other versions" {
|
||||
remove_executable "2.7.7" "python2.7"
|
||||
remove_executable "2.7.8" "python2.7"
|
||||
create_executable "2.7.9" "python2.7"
|
||||
|
||||
stub pyenv-exec "virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.9/bin/python2.7 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "python -s -m ensurepip : true"
|
||||
stub pyenv-which "python2.7 : false"
|
||||
stub pyenv-whence "python2.7 : echo 2.7.7; echo 2.7.8; echo 2.7.9"
|
||||
stub pyenv-which "python2.7 : echo ${PYENV_ROOT}/versions/2.7.9/bin/python2.7"
|
||||
|
||||
run pyenv-virtualenv --verbose --python=python2.7 venv
|
||||
|
||||
assert_output <<OUT
|
||||
PYENV_VERSION=2.7.8 virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.9/bin/python2.7 ${PYENV_ROOT}/versions/venv
|
||||
OUT
|
||||
assert_success
|
||||
|
||||
unstub pyenv-which
|
||||
unstub pyenv-whence
|
||||
unstub pyenv-exec
|
||||
|
||||
remove_executable "2.7.7" "python2.7"
|
||||
remove_executable "2.7.8" "python2.7"
|
||||
remove_executable "2.7.9" "python2.7"
|
||||
}
|
||||
|
||||
@test "cannot resolve python executable" {
|
||||
remove_executable "2.7.7" "python2.7"
|
||||
remove_executable "2.7.8" "python2.7"
|
||||
remove_executable "2.7.9" "python2.7"
|
||||
|
||||
stub pyenv-which "python2.7 : false"
|
||||
stub pyenv-whence "python2.7 : false"
|
||||
stub pyenv-which "python2.7 : false"
|
||||
|
||||
run pyenv-virtualenv --verbose --python=python2.7 venv
|
||||
|
||||
assert_output <<OUT
|
||||
pyenv-virtualenv: \`python2.7' is not installed in pyenv.
|
||||
OUT
|
||||
assert_failure
|
||||
|
||||
unstub pyenv-which
|
||||
unstub pyenv-whence
|
||||
|
||||
remove_executable "2.7.7" "python2.7"
|
||||
remove_executable "2.7.8" "python2.7"
|
||||
remove_executable "2.7.9" "python2.7"
|
||||
}
|
||||
@@ -101,20 +101,20 @@ OUT
|
||||
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
|
||||
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
|
||||
stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "virtualenv --python=python3 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "virtualenv --python=${TMP}/python3 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "python -s -m ensurepip : true"
|
||||
|
||||
remove_executable "3.4.1" "virtualenv"
|
||||
create_executable "3.4.1" "pyvenv"
|
||||
|
||||
run pyenv-virtualenv -p python3 venv
|
||||
run pyenv-virtualenv -p ${TMP}/python3 venv
|
||||
|
||||
assert_success
|
||||
assert_output <<OUT
|
||||
PYENV_VERSION=3.4.1 pip install virtualenv
|
||||
PYENV_VERSION=3.4.1 virtualenv --python=python3 ${PYENV_ROOT}/versions/venv
|
||||
PYENV_VERSION=3.4.1 virtualenv --python=${TMP}/python3 ${PYENV_ROOT}/versions/venv
|
||||
rehashed
|
||||
OUT
|
||||
assert_success
|
||||
|
||||
unstub_pyenv
|
||||
unstub pyenv-exec
|
||||
@@ -126,20 +126,20 @@ OUT
|
||||
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
|
||||
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
|
||||
stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "virtualenv --python=python3 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "virtualenv --python=${TMP}/python3 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "python -s -m ensurepip : true"
|
||||
|
||||
remove_executable "3.4.1" "virtualenv"
|
||||
create_executable "3.4.1" "pyvenv"
|
||||
|
||||
run pyenv-virtualenv --python=python3 venv
|
||||
run pyenv-virtualenv --python=${TMP}/python3 venv
|
||||
|
||||
assert_success
|
||||
assert_output <<OUT
|
||||
PYENV_VERSION=3.4.1 pip install virtualenv
|
||||
PYENV_VERSION=3.4.1 virtualenv --python=python3 ${PYENV_ROOT}/versions/venv
|
||||
PYENV_VERSION=3.4.1 virtualenv --python=${TMP}/python3 ${PYENV_ROOT}/versions/venv
|
||||
rehashed
|
||||
OUT
|
||||
assert_success
|
||||
|
||||
unstub_pyenv
|
||||
unstub pyenv-exec
|
||||
|
||||
@@ -73,19 +73,19 @@ OUT
|
||||
export PYENV_VERSION="3.2.1"
|
||||
stub_pyenv "${PYENV_VERSION}"
|
||||
stub pyenv-version-name "echo \${PYENV_VERSION}"
|
||||
stub pyenv-exec "virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "python -s -m ensurepip : false"
|
||||
stub pyenv-exec "python -s */get-pip.py : true"
|
||||
stub curl true
|
||||
|
||||
run pyenv-virtualenv -v -p python venv
|
||||
run pyenv-virtualenv -v -p ${TMP}/python venv
|
||||
|
||||
assert_success
|
||||
assert_output <<OUT
|
||||
PYENV_VERSION=3.2.1 virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv
|
||||
PYENV_VERSION=3.2.1 virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/venv
|
||||
Installing pip from https://bootstrap.pypa.io/get-pip.py...
|
||||
rehashed
|
||||
OUT
|
||||
assert_success
|
||||
|
||||
unstub_pyenv
|
||||
unstub pyenv-version-name
|
||||
@@ -97,19 +97,19 @@ OUT
|
||||
export PYENV_VERSION="3.2.1"
|
||||
stub_pyenv "${PYENV_VERSION}"
|
||||
stub pyenv-version-name "echo \${PYENV_VERSION}"
|
||||
stub pyenv-exec "virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "python -s -m ensurepip : false"
|
||||
stub pyenv-exec "python -s */get-pip.py : true"
|
||||
stub curl true
|
||||
|
||||
run pyenv-virtualenv --verbose --python=python venv
|
||||
run pyenv-virtualenv --verbose --python=${TMP}/python venv
|
||||
|
||||
assert_success
|
||||
assert_output <<OUT
|
||||
PYENV_VERSION=3.2.1 virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv
|
||||
PYENV_VERSION=3.2.1 virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/venv
|
||||
Installing pip from https://bootstrap.pypa.io/get-pip.py...
|
||||
rehashed
|
||||
OUT
|
||||
assert_success
|
||||
|
||||
unstub_pyenv
|
||||
unstub pyenv-version-name
|
||||
|
||||
Reference in New Issue
Block a user