prefer pyvenv rather than virtualenv if --pyvenv is given

This commit is contained in:
Yamashita Yuu
2013-06-19 23:57:45 +09:00
parent 1db9840620
commit 6e7945a626
2 changed files with 39 additions and 10 deletions

View File

@@ -67,14 +67,14 @@ abs_dirname() {
} }
version() { version() {
local version="$(pyenv-exec virtualenv --version 2>/dev/null || true)" local version="$(virtualenv --version 2>/dev/null || true)"
echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (virtualenv ${version:-unknown})" echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (virtualenv ${version:-unknown})"
} }
usage() { usage() {
# We can remove the sed fallback once pyenv 0.2.0 is widely available. # We can remove the sed fallback once pyenv 0.2.0 is widely available.
pyenv-help virtualenv 2>/dev/null || sed -ne '/^#/!q;s/.//;s/.//;1,4d;p' < "$0" pyenv-help virtualenv 2>/dev/null || sed -ne '/^#/!q;s/.//;s/.//;1,4d;p' < "$0"
pyenv-exec virtualenv --help 2>/dev/null || true virtualenv --help 2>/dev/null || true
[ -z "$1" ] || exit "$1" [ -z "$1" ] || exit "$1"
} }
@@ -87,6 +87,14 @@ require_executable() {
fi fi
} }
virtualenv() {
if [ -n "$PYVENV" ]; then
pyenv-exec pyvenv "$@"
else
pyenv-exec virtualenv "$@"
fi
}
PYENV_VIRTUALENV_ROOT="$(abs_dirname "$0")/.." PYENV_VIRTUALENV_ROOT="$(abs_dirname "$0")/.."
if [ -z "${PYENV_VIRTUALENV_CACHE_PATH}" ]; then if [ -z "${PYENV_VIRTUALENV_CACHE_PATH}" ]; then
PYENV_VIRTUALENV_CACHE_PATH="${PYTHON_BUILD_CACHE_PATH:-${PYENV_ROOT}/cache}" PYENV_VIRTUALENV_CACHE_PATH="${PYTHON_BUILD_CACHE_PATH:-${PYENV_ROOT}/cache}"
@@ -94,6 +102,7 @@ fi
VIRTUALENV_OPTIONS=() VIRTUALENV_OPTIONS=()
unset FORCE unset FORCE
unset PYVENV
unset QUIET unset QUIET
unset UPGRADE unset UPGRADE
unset VERBOSE unset VERBOSE
@@ -107,6 +116,9 @@ for option in "${OPTIONS[@]}"; do
"h" | "help" ) "h" | "help" )
usage 0 usage 0
;; ;;
"pyvenv" )
PYVENV=true
;;
"q" | "quiet" ) "q" | "quiet" )
QUIET="--quiet" QUIET="--quiet"
;; ;;
@@ -161,12 +173,23 @@ UPGRADE_LIST="${TMP}/pyenv-virtualenv.${SEED}.txt"
VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME}" VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME}"
require_executable "${VERSION_NAME}" "virtualenv" 2>/dev/null || { if [ -n "$PYVENV" ]; then
require_executable "${VERSION_NAME}" "pip" require_executable "${VERSION_NAME}" "pyvenv"
VIRTUALENV_VERSION="==${VIRTUALENV_VERSION}" # Unset some arguments not supported by pyvenv
pyenv-exec pip install $QUIET $VERBOSE "virtualenv${VIRTUALENV_VERSION%==}" unset QUIET
pyenv-rehash unset VERBOSE
} if [ -n "$UPGRADE" ]; then
unset UPGRADE
VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--upgrade"
fi
else
require_executable "${VERSION_NAME}" "virtualenv" || {
require_executable "${VERSION_NAME}" "pip"
VIRTUALENV_VERSION="==${VIRTUALENV_VERSION}"
pyenv-exec pip install $QUIET $VERBOSE "virtualenv${VIRTUALENV_VERSION%==}"
pyenv-rehash
}
fi
# Unset environment variables which starts with `VIRTUALENV_`. # Unset environment variables which starts with `VIRTUALENV_`.
# These variables are reserved for virtualenv. # These variables are reserved for virtualenv.
@@ -232,7 +255,7 @@ STATUS=0
# change to cache directory to reuse them between invocation. # change to cache directory to reuse them between invocation.
mkdir -p "${PYENV_VIRTUALENV_CACHE_PATH}" mkdir -p "${PYENV_VIRTUALENV_CACHE_PATH}"
cd "${PYENV_VIRTUALENV_CACHE_PATH}" cd "${PYENV_VIRTUALENV_CACHE_PATH}"
pyenv-exec virtualenv $QUIET $VERBOSE "${VIRTUALENV_OPTIONS[@]}" "${VIRTUALENV_PATH}" || STATUS="$?" virtualenv $QUIET $VERBOSE "${VIRTUALENV_OPTIONS[@]}" "${VIRTUALENV_PATH}" || STATUS="$?"
# Create symlink of `python' bound for actual executable # Create symlink of `python' bound for actual executable
# TODO: remove this if virtualenv doesn't really need this # TODO: remove this if virtualenv doesn't really need this

View File

@@ -24,11 +24,17 @@ real_prefix() { # virtualenv
PYENV_VERSION="${version}" pyenv-exec python -c 'import sys;print(sys.real_prefix)' 2>/dev/null 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=() VIRTUALENV_PREFIX_PATHS=()
for version in "${versions[@]}"; do for version in "${versions[@]}"; do
PREFIX="$(pyenv-prefix "${version}")" PREFIX="$(pyenv-prefix "${version}")"
if [ -f "${PREFIX}/bin/activate" ]; then if [ -f "${PREFIX}/bin/activate" ]; then
VIRTUALENV_PREFIX_PATH="$(real_prefix "${version}" || true)" VIRTUALENV_PREFIX_PATH="$(real_prefix "${version}" || base_prefix "${version}" || true)"
if [ -d "${VIRTUALENV_PREFIX_PATH}" ]; then if [ -d "${VIRTUALENV_PREFIX_PATH}" ]; then
VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "$VIRTUALENV_PREFIX_PATH") VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "$VIRTUALENV_PREFIX_PATH")
fi fi