mirror of
https://github.com/pyenv/pyenv-virtualenv.git
synced 2025-11-16 15:33:51 -05:00
Rewrite virtualenv-prefix without executing python (#132)
This commit is contained in:
@@ -19,17 +19,6 @@ else
|
||||
IFS=: versions=($(pyenv-version-name))
|
||||
fi
|
||||
|
||||
real_prefix() { # virtualenv
|
||||
local version="$1"
|
||||
PYENV_VERSION="${version}" pyenv-exec python -c 'import sys;print(sys.real_prefix)' 2>/dev/null
|
||||
}
|
||||
|
||||
base_prefix() { # pyvenv
|
||||
# FIXME: non-pyvenv versions also have sys.base_prefix
|
||||
local version="$1"
|
||||
PYENV_VERSION="${version}" pyenv-exec python -c 'import sys;print(sys.base_prefix)' 2>/dev/null
|
||||
}
|
||||
|
||||
VIRTUALENV_PREFIX_PATHS=()
|
||||
for version in "${versions[@]}"; do
|
||||
if [ "$version" = "system" ]; then
|
||||
@@ -39,8 +28,27 @@ for version in "${versions[@]}"; do
|
||||
PYENV_PREFIX_PATH="$(pyenv-prefix "${version}")"
|
||||
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}}")
|
||||
if [ -f "${PYENV_PREFIX_PATH}/bin/conda" ]; then
|
||||
# conda
|
||||
VIRTUALENV_PREFIX_PATH="${PYENV_PREFIX_PATH}"
|
||||
else
|
||||
if [ -f "${PYENV_ROOT}/versions/${version}/pyvenv.cfg" ]; then
|
||||
# pyvenv
|
||||
virtualenv_binpath="$(cut -b 1-1024 "${PYENV_ROOT}/versions/${version}/pyvenv.cfg" | sed -n '/^ *home *= */s///p' || true)"
|
||||
VIRTUALENV_PREFIX_PATH="${virtualenv_binpath%/bin}"
|
||||
else
|
||||
# virtualenv
|
||||
shopt -s nullglob
|
||||
VIRTUALENV_PREFIX_PATH="$(cat "${PYENV_ROOT}/versions/${version}/lib/"*"/orig-prefix.txt" </dev/null 2>&1 || true)"
|
||||
shopt -u nullglob
|
||||
fi
|
||||
fi
|
||||
if [ -d "${VIRTUALENV_PREFIX_PATH}" ]; then
|
||||
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
|
||||
exit 1
|
||||
|
||||
Reference in New Issue
Block a user