diff --git a/bin/pyenv-virtualenv b/bin/pyenv-virtualenv index d40b4ab..efd0397 100755 --- a/bin/pyenv-virtualenv +++ b/bin/pyenv-virtualenv @@ -67,14 +67,14 @@ abs_dirname() { } 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})" } usage() { # 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-exec virtualenv --help 2>/dev/null || true + virtualenv --help 2>/dev/null || true [ -z "$1" ] || exit "$1" } @@ -87,6 +87,14 @@ require_executable() { fi } +virtualenv() { + if [ -n "$PYVENV" ]; then + pyenv-exec pyvenv "$@" + else + pyenv-exec virtualenv "$@" + fi +} + PYENV_VIRTUALENV_ROOT="$(abs_dirname "$0")/.." if [ -z "${PYENV_VIRTUALENV_CACHE_PATH}" ]; then PYENV_VIRTUALENV_CACHE_PATH="${PYTHON_BUILD_CACHE_PATH:-${PYENV_ROOT}/cache}" @@ -94,6 +102,7 @@ fi VIRTUALENV_OPTIONS=() unset FORCE +unset PYVENV unset QUIET unset UPGRADE unset VERBOSE @@ -107,6 +116,9 @@ for option in "${OPTIONS[@]}"; do "h" | "help" ) usage 0 ;; + "pyvenv" ) + PYVENV=true + ;; "q" | "quiet" ) QUIET="--quiet" ;; @@ -161,12 +173,23 @@ UPGRADE_LIST="${TMP}/pyenv-virtualenv.${SEED}.txt" VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME}" -require_executable "${VERSION_NAME}" "virtualenv" 2>/dev/null || { - require_executable "${VERSION_NAME}" "pip" - VIRTUALENV_VERSION="==${VIRTUALENV_VERSION}" - pyenv-exec pip install $QUIET $VERBOSE "virtualenv${VIRTUALENV_VERSION%==}" - pyenv-rehash -} +if [ -n "$PYVENV" ]; then + require_executable "${VERSION_NAME}" "pyvenv" + # Unset some arguments not supported by pyvenv + unset QUIET + 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_`. # These variables are reserved for virtualenv. @@ -232,7 +255,7 @@ STATUS=0 # change to cache directory to reuse them between invocation. mkdir -p "${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 # TODO: remove this if virtualenv doesn't really need this diff --git a/bin/pyenv-virtualenv-prefix b/bin/pyenv-virtualenv-prefix index aff983d..a7d49ac 100755 --- a/bin/pyenv-virtualenv-prefix +++ b/bin/pyenv-virtualenv-prefix @@ -24,11 +24,17 @@ real_prefix() { # virtualenv 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 PREFIX="$(pyenv-prefix "${version}")" 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 VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "$VIRTUALENV_PREFIX_PATH") fi