diff --git a/bin/pyenv-virtualenv b/bin/pyenv-virtualenv index 8316422..f7f391a 100755 --- a/bin/pyenv-virtualenv +++ b/bin/pyenv-virtualenv @@ -155,9 +155,17 @@ detect_venv() { if [ -x "${prefix}/bin/virtualenv" ]; then HAS_VIRTUALENV=1 fi - # Prefer `python3.x` executable if available (#206, #282) local python - for python in "python${PYENV_VERSION%.*}" "python${PYENV_VERSION%%.*}" "python"; do + local -a pythons + if [[ $PYENV_VERSION == "system" ]]; then + # Prefer `python3.x` executable if available (#206, #282) + pythons=("python3" "python" "python2") + else + # as per PEP 394, custom activated Python environments should provide the "python" command + # this includes Pyenv-provided installations + pythons=("python") + fi + for python in "${pythons[@]}"; do if pyenv-exec "${python}" -m venv --help 1>/dev/null 2>&1; then HAS_M_VENV=1 M_VENV_PYTHON_BIN="${python}" diff --git a/test/envs.bats b/test/envs.bats index 93bc114..325aa33 100644 --- a/test/envs.bats +++ b/test/envs.bats @@ -25,15 +25,15 @@ unstub_pyenv() { stub pyenv-version-name "echo '${PYENV_VERSION}'" stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'" stub pyenv-virtualenv-prefix " : false" - stub pyenv-exec "python3.5 -m venv --help : true" - stub pyenv-exec "python3.5 -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin" + stub pyenv-exec "python -m venv --help : true" + stub pyenv-exec "python -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin" stub pyenv-exec "python -s -m ensurepip : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin/pip" run pyenv-virtualenv venv assert_success assert_output <