pyenv-exec: no -a
with exec
to keep $PATH with system version (#1169)
Using `exec -a` caused Python to use $PATH to look up the full program name (for `sys.executable`), which 314937d then tried to fix by changing $PATH also for the system version. This is not necessary anymore when not using the short name with `exec`. This was rejected upstream (https://github.com/rbenv/rbenv/pull/1089#issuecomment-394531896), since it is not a problem with Ruby apparently. Uses $PYENV_ROOT to check if system version is used. Fixes https://github.com/pyenv/pyenv/issues/98. Fixes https://github.com/pyenv/pyenv/issues/789.
This commit is contained in:
parent
31b7e1c390
commit
ecd67c8223
@ -41,7 +41,8 @@ for script in "${scripts[@]}"; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
shift 1
|
shift 1
|
||||||
# CPython's `sys.executable` requires the `PYENV_BIN_PATH` to be at the top of the `PATH`.
|
if [ "${PYENV_BIN_PATH#${PYENV_ROOT}}" != "${PYENV_BIN_PATH}" ]; then
|
||||||
# https://github.com/pyenv/pyenv/issues/98
|
# Only add to $PATH for non-system version.
|
||||||
export PATH="${PYENV_BIN_PATH}:${PATH}"
|
export PATH="${PYENV_BIN_PATH}:${PATH}"
|
||||||
exec -a "$PYENV_COMMAND" "$PYENV_COMMAND_PATH" "$@"
|
fi
|
||||||
|
exec "$PYENV_COMMAND_PATH" "$@"
|
||||||
|
@ -77,3 +77,39 @@ ${PYENV_ROOT}/versions/3.4/bin/python
|
|||||||
args
|
args
|
||||||
OUT
|
OUT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "sys.executable with system version (#98)" {
|
||||||
|
system_python=$(which python)
|
||||||
|
|
||||||
|
PYENV_VERSION="custom"
|
||||||
|
create_executable "python" ""
|
||||||
|
unset PYENV_VERSION
|
||||||
|
|
||||||
|
pyenv-rehash
|
||||||
|
run pyenv-exec python -c 'import sys; print(sys.executable)'
|
||||||
|
assert_success "${system_python}"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test '$PATH is not modified with system Python' {
|
||||||
|
# Create a wrapper executable that verifies PATH.
|
||||||
|
PYENV_VERSION="custom"
|
||||||
|
create_executable "python" '[[ "$PATH" == "${PYENV_TEST_DIR}/root/versions/custom/bin:"* ]] || { echo "unexpected:$PATH"; exit 2;}'
|
||||||
|
unset PYENV_VERSION
|
||||||
|
pyenv-rehash
|
||||||
|
|
||||||
|
# Path is not modified with system Python.
|
||||||
|
run pyenv-exec python -c 'import os; print(os.getenv("PATH"))'
|
||||||
|
assert_success "$PATH"
|
||||||
|
|
||||||
|
# Path is modified with custom Python.
|
||||||
|
PYENV_VERSION=custom run pyenv-exec python
|
||||||
|
assert_success
|
||||||
|
|
||||||
|
# Path is modified with custom:system Python.
|
||||||
|
PYENV_VERSION=custom:system run pyenv-exec python
|
||||||
|
assert_success
|
||||||
|
|
||||||
|
# Path is not modified with system:custom Python.
|
||||||
|
PYENV_VERSION=system:custom run pyenv-exec python -c 'import os; print(os.getenv("PATH"))'
|
||||||
|
assert_success "$PATH"
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user