diff --git a/bin/pyenv-virtualenv-prefix b/bin/pyenv-virtualenv-prefix index d097670..901f2da 100755 --- a/bin/pyenv-virtualenv-prefix +++ b/bin/pyenv-virtualenv-prefix @@ -37,11 +37,16 @@ for version in "${versions[@]}"; do exit 1 fi PYENV_PREFIX_PATH="$(pyenv-prefix "${version}")" - if [ -f "${PYENV_PREFIX_PATH}/bin/activate" ]; then - VIRTUALENV_PREFIX_PATH="$(real_prefix "${version}" || base_prefix "${version}" || true)" - VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "${VIRTUALENV_PREFIX_PATH:-${PYENV_PREFIX_PATH}}") + if [ -x "${PYENV_PREFIX_PATH}/bin/python" ]; then + if [ -f "${PYENV_PREFIX_PATH}/bin/activate" ]; then + VIRTUALENV_PREFIX_PATH="$(real_prefix "${version}" || base_prefix "${version}" || true)" + VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "${VIRTUALENV_PREFIX_PATH:-${PYENV_PREFIX_PATH}}") + else + echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2 + exit 1 + fi else - echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2 + echo "pyenv-virtualenv: \`python' not found in version \`${version}'" 1>&2 exit 1 fi done diff --git a/test/prefix.bats b/test/prefix.bats index ea03736..95a9cae 100644 --- a/test/prefix.bats +++ b/test/prefix.bats @@ -6,13 +6,23 @@ setup() { export PYENV_ROOT="${TMP}/pyenv" } -create_virtualenv() { +create_version() { mkdir -p "${PYENV_ROOT}/versions/$1/bin" + touch "${PYENV_ROOT}/versions/$1/bin/python" + chmod +x "${PYENV_ROOT}/versions/$1/bin/python" +} + +remove_version() { + rm -fr "${PYENV_ROOT}/versions/$1" +} + +create_virtualenv() { + create_version "$@" touch "${PYENV_ROOT}/versions/$1/bin/activate" } remove_virtualenv() { - rm -fr "${PYENV_ROOT}/versions/$1" + remove_version "$@" } @test "display prefix with using sys.real_prefix" { @@ -118,13 +128,13 @@ OUT @test "should fail if the version is not a virtualenv" { stub pyenv-version-name "echo 3.4.0" stub pyenv-prefix "3.4.0 : echo \"${PYENV_ROOT}/versions/3.4.0\"" - mkdir -p "${PYENV_ROOT}/versions/3.4.0" + create_version "3.4.0" PYENV_VERSION="3.4.0" run pyenv-virtualenv-prefix unstub pyenv-version-name unstub pyenv-prefix - rmdir "${PYENV_ROOT}/versions/3.4.0" + remove_version "3.4.0" assert_failure assert_output <