45 Commits

Author SHA1 Message Date
Yamashita Yuu
191e806ba9 shell version set in activate should be unset in deactivate (#61) 2014-12-23 11:21:52 +09:00
Yamashita Yuu
4b198663c7 Merge branch 'pr60' (#60) 2014-12-16 23:05:01 +09:00
Yamashita Yuu
ad0fa82329 Fix broken fish test (#60) 2014-12-16 23:04:35 +09:00
Tony Wang
f681df6f20 fix incorrect fish syntax in pyenv-virtualenv-init 2014-12-16 17:53:26 +08:00
Yamashita, Yuu
593268b988 Merge pull request #59 from blueyed/doc-fixes
Some doc fixes: typos, grammar, clarification and formatting
2014-12-14 20:51:29 +09:00
Yamashita Yuu
e774464ced ignore error from pyenv-version-name since it might fail if there is configuration error (yyuu/pyenv#291) 2014-12-14 14:15:18 +09:00
Yamashita, Yuu
6d46b6ab53 Merge pull request #58 from pygeek/patch-1
Update read to include pyenv-init - note.
2014-12-14 14:14:55 +09:00
Clinton Christian
11a86ad7d7 Remove white space. 2014-12-13 16:44:03 -05:00
Daniel Hahler
99145752f3 Some doc fixes: typos, grammar, clarification and formatting 2014-12-12 02:41:04 +01:00
Clinton Christian
1da2fe09c2 Update read to include pyenv-init - note. 2014-12-11 16:18:43 -05:00
Yamashita Yuu
ad644e83b5 v20141106 2014-11-06 09:47:54 -08:00
Yamashita Yuu
0786c7c5b6 The pyenv virtualenv-init is not always necessary (#42)
It is necessary only if user want automatic fashion of activation.
If the users of pyenv-virtualenv doesn't need the feature, they can
omit the configuration safely.
2014-11-03 08:48:42 -08:00
Yamashita Yuu
58e93f9e0d Fix test which has broken by 2060c43387 2014-10-27 11:04:42 +09:00
Yamashita Yuu
2060c43387 Stop buzzy errors from embeded shell functions 2014-10-27 10:36:10 +09:00
Yamashita Yuu
a02eb0a396 Calling create_symlinks after ensurepip is unnecessary
Install script of setuptools-6.1/pip-1.5.6 will create those links if needed
2014-10-19 10:59:52 +09:00
Yamashita Yuu
1d36ef2f68 v20141012 2014-10-12 21:55:47 +09:00
Yamashita Yuu
5795eabaac Merge branch 'bcb-master' (fixed #47) 2014-10-12 21:41:43 +09:00
Yamashita Yuu
e655abbd41 Fix broken tests (#47) 2014-10-12 21:37:10 +09:00
Yamashita Yuu
d6671249b7 Should not persist PYENV_DEACTIVATE after automatic deactivation (#47, #48) 2014-10-12 21:34:18 +09:00
Beau Barker
79bfc9d362 When changing from a virtualenv to "system", unset PYENV_DEACTIVATE. Previously the var remained set, which made it impossible to reactivate the previous virtualenv 2014-09-17 19:50:41 +10:00
Yamashita, Yuu
5252cd0777 Merge pull request #46 from NegaMorgan/add-virtualenv-delete-instructions
added instructions for deleting virtualenvs
2014-09-06 01:28:53 +09:00
Morgan Evans
909e4de414 added instructions for deleting virtualenvs 2014-09-05 12:09:33 -04:00
Yamashita, Yuu
215bda7032 Merge pull request #44 from blueyed/no-whitespace-in-name
Do not allow whitespace in VIRTUALENV_NAME
2014-09-04 08:56:44 +09:00
Daniel Hahler
86046fd4e8 Do not allow whitespace in VIRTUALENV_NAME
While this could work in general, it fails in the end, because
whitespace is not allowed/supported in the shebang line with the
scripts in the created virtualenv.
2014-09-03 23:28:46 +02:00
Yamashita, Yuu
2cc21f112c Merge pull request #40 from s0undt3ch/master
Fix weird bash code issue which made bash complain about "then"
2014-08-14 10:03:35 +09:00
Pedro Algarvio
81736da905 Indent to 2 spaces. 2014-08-13 19:51:22 +01:00
Pedro Algarvio
7304608e0f Adapt tests to new output 2014-08-13 03:58:32 +01:00
Pedro Algarvio
3ebb00414f if [ pyenv deactivate --no-error --verbose ] is not bourne shell compatible 2014-08-13 03:40:02 +01:00
Yamashita Yuu
c9bcef656c Use . instead of source to support POSIX sh 2014-08-13 10:54:18 +09:00
Pedro Algarvio
2662b5807c Fix weird bash code issue which made bash complain about "then" 2014-08-13 00:55:04 +01:00
Yamashita Yuu
fa04d6f9df Add notes on pyvenv in README 2014-07-11 20:30:43 +09:00
Yamashita Yuu
a3c86f013b Deactivate virtualenv even if it has been activated manually 2014-07-11 20:24:58 +09:00
Yamashita Yuu
7aa5d13633 v20140705 2014-07-05 17:26:53 +09:00
Yamashita Yuu
aef2546319 Fix broken fish's if statement 2014-07-05 07:30:53 +09:00
Yamashita Yuu
6b4d6249a0 No need to use eval in fish init script 2014-07-05 07:27:12 +09:00
Yamashita Yuu
0de2cdbbc3 Should not persist PYENV_DEACTIVATE after failed attempt to deactivate and activate 2014-07-05 06:53:46 +09:00
Yamashita Yuu
abfda4bac9 Fix issues with manual activation of virtual environments (#34) 2014-07-04 22:55:06 +09:00
Yamashita Yuu
be18fd294e Fix virtualenv-prefix when the version is system 2014-07-04 22:44:08 +09:00
Yamashita Yuu
d4ce853e94 Display information on automatic (de)?activation 2014-07-04 22:44:05 +09:00
Yamashita Yuu
58ed045796 s/QUIET/NOERROR/g 2014-07-04 22:10:35 +09:00
Yamashita Yuu
c2b5bbd19a Fix fish syntax error at else 2014-07-04 20:51:31 +09:00
Yamashita Yuu
f0c400b669 Add --quiet option to activate and deactivate 2014-07-04 20:47:10 +09:00
Yamashita Yuu
5b3b909089 Exit as error on deactivation failures 2014-07-04 20:33:37 +09:00
Yamashita Yuu
0b5e0cf592 Unset shell version only if the deactivate has invoked 2014-07-04 20:27:55 +09:00
Yamashita Yuu
c09a6d3d6c Exit as error on activation failures 2014-07-04 20:23:29 +09:00
14 changed files with 541 additions and 157 deletions

109
README.md
View File

@@ -3,12 +3,12 @@
[![Build Status](https://travis-ci.org/yyuu/pyenv-virtualenv.png)](https://travis-ci.org/yyuu/pyenv-virtualenv) [![Build Status](https://travis-ci.org/yyuu/pyenv-virtualenv.png)](https://travis-ci.org/yyuu/pyenv-virtualenv)
pyenv-virtualenv is a [pyenv](https://github.com/yyuu/pyenv) plugin pyenv-virtualenv is a [pyenv](https://github.com/yyuu/pyenv) plugin
that provides a `pyenv virtualenv` command to create virtualenv for Python that provides a `pyenv virtualenv` command to create virtualenvs for Python
on UNIX-like systems. on UNIX-like systems.
(NOTICE: If you are an existing user of [virtualenvwrapper](http://pypi.python.org/pypi/virtualenvwrapper) (NOTICE: If you are an existing user of [virtualenvwrapper](http://pypi.python.org/pypi/virtualenvwrapper)
and you love it, [pyenv-virtualenvwrapper](https://github.com/yyuu/pyenv-virtualenvwrapper) may help you and you love it, [pyenv-virtualenvwrapper](https://github.com/yyuu/pyenv-virtualenvwrapper) may help you
to manage your virtualenvs.) (additionally) to manage your virtualenvs.)
## Installation ## Installation
@@ -17,24 +17,26 @@ to manage your virtualenvs.)
This will install the latest development version of pyenv-virtualenv into This will install the latest development version of pyenv-virtualenv into
the `~/.pyenv/plugins/pyenv-virtualenv` directory. the `~/.pyenv/plugins/pyenv-virtualenv` directory.
**Important note:** If you installed pyenv into a non-standard directory, make sure that you clone this **Important note:** If you installed pyenv into a non-standard directory, make
repo into the 'plugins' directory of wherever you installed into. sure that you clone this repo into the 'plugins' directory of wherever you
installed into.
From inside that directory you can: From inside that directory you can:
- Check out a specific release tag. - Check out a specific release tag.
- Get the latest development release by running `git pull` to download the latest changes. - Get the latest development release by running `git pull` to download the
latest changes.
1. **Check out pyenv-virtualenv into plugin directory** 1. **Check out pyenv-virtualenv into plugin directory**
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv $ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
2. **Add `pyenv virtualenv-init` to your shell** to enable activation of virtualenv 2. **Add `pyenv virtualenv-init` to your shell** to enable activation of virtualenv. This is entirely optional but pretty useful.
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
**Zsh note**: Modify your `~/.zshenv` file instead of `~/.bash_profile`. **Zsh note**: Modify your `~/.zshenv` file instead of `~/.bash_profile`.
**Pyenv note**: You may also need to add 'eval "$(pyenv init -)"' to your profile if you haven't done so already.
3. **Restart your shell to the enable pyenv-virtualenv** 3. **Restart your shell to enable pyenv-virtualenv**
$ exec "$SHELL" $ exec "$SHELL"
@@ -42,11 +44,11 @@ From inside that directory you can:
### Installing with Homebrew (for OS X users) ### Installing with Homebrew (for OS X users)
Mac OS X users can install pyenv-virtualenv with the Mac OS X users can install pyenv-virtualenv with the
[Homebrew](http://brew.sh) package manager. This [Homebrew](http://brew.sh) package manager.
will give you access to the `pyenv-virtualenv` command. If you have pyenv This will give you access to the `pyenv-virtualenv` command. If you have pyenv
installed, you will also be able to use the `pyenv virtualenv` command. installed, you will also be able to use the `pyenv virtualenv` command.
*This is recommended method of installation if you installed pyenv *This is the recommended method of installation if you installed pyenv
with Homebrew.* with Homebrew.*
``` ```
@@ -59,15 +61,16 @@ Or, if you would like to install the latest development release:
$ brew install --HEAD pyenv-virtualenv $ brew install --HEAD pyenv-virtualenv
``` ```
After installation, you'll still need to add `eval "$(pyenv virtualenv-init -)"` to your After installation, you'll still need to add `eval "$(pyenv virtualenv-init
profile (as stated in the caveats). You'll only ever have to do this once. -)"` to your profile (as stated in the caveats). You'll only ever have to do
this once.
## Usage ## Usage
### Using `pyenv virtualenv` with pyenv ### Using `pyenv virtualenv` with pyenv
To create a virtualenv for the Python version use with pyenv, run To create a virtualenv for the Python version used with pyenv, run
`pyenv virtualenv`, specifying the Python version you want and the name `pyenv virtualenv`, specifying the Python version you want and the name
of the virtualenv directory. For example, of the virtualenv directory. For example,
@@ -75,26 +78,25 @@ of the virtualenv directory. For example,
$ pyenv virtualenv 2.7.7 my-virtual-env-2.7.7 $ pyenv virtualenv 2.7.7 my-virtual-env-2.7.7
``` ```
will create a virtualenv based on Python 2.7.7 will create a virtualenv based on Python 2.7.7 under `~/.pyenv/versions` in a
under `~/.pyenv/versions` in a folder called `my-virtual-env-2.7.7`. folder called `my-virtual-env-2.7.7`.
### Create virtualenv from current version ### Create virtualenv from current version
If there is only one argument is given to `pyenv virtualenv`, If there is only one argument given to `pyenv virtualenv`, the virtualenv will
virtualenv will be created with given name based on current be created with the given name based on the current pyenv Python version.
version.
``` ```
$ pyenv version $ pyenv version
3.4.1 (set by /home/yyuu/.pyenv/version) 3.4.2 (set by /home/yyuu/.pyenv/version)
$ pyenv virtualenv venv34 $ pyenv virtualenv venv34
``` ```
### List existing virtualenvs ### List existing virtualenvs
`pyenv virtualenvs` shows you the list of existing virtualenvs. `pyenv virtualenvs` shows you the list of existing virtualenvs:
``` ```
$ pyenv shell venv27 $ pyenv shell venv27
@@ -106,33 +108,74 @@ $ pyenv virtualenvs
### Activate virtualenv ### Activate virtualenv
Some external tools (e.g. [jedi](https://github.com/davidhalter/jedi)) might require you to `activate` the virtualenv. Some external tools (e.g. [jedi](https://github.com/davidhalter/jedi)) might
The `pyenv-virtualenv` will automatically activate/deactivate the virtualenv if the `eval "$(pyenv virtualenv-init -)"` is properly configured in your shell. require you to `activate` the virtualenv.
You can also activate and deactivate a pyenv virtualenv this way: `pyenv-virtualenv` will automatically activate/deactivate the virtualenv if
the `eval "$(pyenv virtualenv-init -)"` is properly configured in your shell.
You can also activate and deactivate a pyenv virtualenv manually:
pyenv activate <name> pyenv activate <name>
pyenv deactivate pyenv deactivate
### Delete existing virtualenv
Removing the directory in `~/.pyenv/versions` will delete the virtualenv, or you can run:
pyenv uninstall my-virtual-env
### virtualenv and pyvenv
There is a [venv](http://docs.python.jp/3/library/venv.html) module available
for CPython 3.3 and newer.
It provides a command-line tool `pyvenv` which is the successor of `virtualenv`
and distributed by default.
`pyenv-virtualenv` uses `pyvenv` if it is available and the `virtualenv`
command is not available.
### Special environment variables ### Special environment variables
You can set certain environment variables to control the pyenv-virtualenv. You can set certain environment variables to control pyenv-virtualenv.
* `PYENV_VIRTUALENV_CACHE_PATH`, if set, specifies a directory to use for * `PYENV_VIRTUALENV_CACHE_PATH`, if set, specifies a directory to use for
caching downloaded package files. caching downloaded package files.
* `VIRTUALENV_VERSION`, if set, forces pyenv-virtualenv to install desired * `VIRTUALENV_VERSION`, if set, forces pyenv-virtualenv to install the desired
version of virtualenv. If the virtualenv has not been installed, version of virtualenv. If `virtualenv` has not been installed,
pyenv-virtualenv will try to install the given version of virtualenv. pyenv-virtualenv will try to install the given version of virtualenv.
* `EZ_SETUP` and `GET_PIP`, if set and pyvenv is preferred than virtualenv, * `EZ_SETUP` and `GET_PIP`, if set and `pyvenv` is preferred over `virtualenv`,
use `ez_setup.py` and `get_pip.py` at specified location. use `ez_setup.py` and `get_pip.py` from the specified location.
* `EZ_SETUP_URL` and `GET_PIP_URL`, if set and pyvenv is preferred * `EZ_SETUP_URL` and `GET_PIP_URL`, if set and `pyvenv` is preferred over
than virtualenv, download `ez_setup.py` and `get_pip.py` from specified URL. `virtualenv`, download `ez_setup.py` and `get_pip.py` from the specified URL.
* `SETUPTOOLS_VERSION` and `PIP_VERSION`, if set and pyvenv is preferred * `SETUPTOOLS_VERSION` and `PIP_VERSION`, if set and `pyvenv` is preferred
than virtualenv, install specified version of setuptools and pip. over `virtualenv`, install the specified version of setuptools and pip.
## Version History ## Version History
#### 20141106
* Stop creating after `ensurepip` since it has done by `ensurepip` itself
* Suppress some useless warnings from `pyenv virtualenv-init`
#### 20141012
* Fix warnings from `shellcheck` to improve support for POSIX sh (#40)
* Do not allow whitespace in `VIRTUALENV_NAME` (#44)
* Should not persist `PYENV_DEACTIVATE` after automatic deactivation (#47, #48)
#### 20140705
* Display information on auto-(de)?activation
* Support manual (de)?activation with auto-activation enabled (#32, #34)
* Exit as error when (de)?activation failed
* Use https://bootstrap.pypa.io/ to install setuptools and pip
* Create backup of original virtualenv within `$(pyenv root)/versions` when `--upgrade`
#### 20140615 #### 20140615
* Fix incompatibility issue of `pyenv activate` and `pyenv deactivate` (#26) * Fix incompatibility issue of `pyenv activate` and `pyenv deactivate` (#26)

View File

@@ -14,19 +14,36 @@
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
# Provide pyenv completions unset NOERROR
if [ "$1" = "--complete" ]; then unset VERBOSE
while [ $# -gt 0 ]; do
case "$1" in
"--complete" )
# Provide pyenv completions
echo --unset echo --unset
exec pyenv-virtualenvs --bare exec pyenv-virtualenvs --bare
fi ;;
"--no-error" )
if [ "$1" = "--unset" ]; then NOERROR=1
;;
"--unset" )
echo "pyenv deactivate" echo "pyenv deactivate"
exit exit
fi ;;
"--verbose" )
VERBOSE=1
;;
* )
break
;;
esac
shift 1
done
no_shell=
versions=("$@") versions=("$@")
if [ -z "$versions" ]; then if [ -z "${versions}" ]; then
no_shell=1 no_shell=1
OLDIFS="$IFS" OLDIFS="$IFS"
IFS=: versions=($(pyenv-version-name)) IFS=: versions=($(pyenv-version-name))
@@ -40,11 +57,16 @@ if [ -z "${PYENV_VIRTUALENV_INIT}" ]; then
fi fi
if [ "${#versions[@]}" -gt 1 ]; then if [ "${#versions[@]}" -gt 1 ]; then
echo "pyenv-virtualenv: cannot activate multiple versions at once: ${versions[@]}" 1>&2 [ -n "$NOERROR" ] || echo "pyenv-virtualenv: cannot activate multiple versions at once: ${versions[@]}" 1>&2
echo "false"
exit 1 exit 1
fi fi
pyenv-virtualenv-prefix "${versions}" 1>/dev/null if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then
[ -n "$NOERROR" ] || echo "pyenv-virtualenv: version \`${versions}' is not a virtualenv" 1>&2
echo "false"
exit 1
fi
shell="$(basename "${PYENV_SHELL:-$SHELL}")" shell="$(basename "${PYENV_SHELL:-$SHELL}")"
case "$shell" in case "$shell" in
@@ -70,21 +92,38 @@ if [ -f "$profile" ] && grep -q 'pyenv init -' "$profile" && ! grep -q 'pyenv vi
pyenv-virtualenv-init >&2 || true pyenv-virtualenv-init >&2 || true
fi fi
if [ -z "$no_shell" ]; then if [ -n "$VERBOSE" ]; then
echo "pyenv shell \"${versions}\";" echo "pyenv-virtualenv: activate ${versions}" 1>&2
fi fi
if [ -z "$no_shell" ]; then
echo "pyenv shell \"${versions}\";"
# shell version set in pyenv-sh-activate should be unset
# https://github.com/yyuu/pyenv-virtualenv/issues/61
case "$shell" in
fish )
echo "setenv PYENV_ACTIVATE_SHELL 1;"
;;
* )
echo "export PYENV_ACTIVATE_SHELL=1;"
;;
esac
fi
prefix="$(pyenv-prefix "${versions}")"
case "$shell" in case "$shell" in
fish ) fish )
cat <<EOS cat <<EOS
set -e PYENV_DEACTIVATE; set -e PYENV_DEACTIVATE;
. "$(pyenv-prefix "${versions}")/bin/activate.fish"; setenv PYENV_ACTIVATE "${prefix}";
. "${prefix}/bin/activate.fish";
EOS EOS
;; ;;
* ) * )
cat <<EOS cat <<EOS
unset PYENV_DEACTIVATE; unset PYENV_DEACTIVATE;
source "$(pyenv-prefix "${versions}")/bin/activate"; export PYENV_ACTIVATE="${prefix}";
. "${prefix}/bin/activate";
EOS EOS
;; ;;
esac esac

View File

@@ -9,28 +9,84 @@
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
unset NOERROR
unset VERBOSE
while [ $# -gt 0 ]; do
case "$1" in
"--no-error" )
NOERROR=1
;;
"--verbose" )
VERBOSE=1
;;
* )
break
;;
esac
shift 1
done
shell="$(basename "${PYENV_SHELL:-$SHELL}")" shell="$(basename "${PYENV_SHELL:-$SHELL}")"
case "$shell" in
fish )
echo "if functions -q deactivate;"
;;
* )
echo "if declare -f deactivate 1>/dev/null 2>&1; then"
;;
esac
prefix="${PYENV_ACTIVATE:-${VIRTUAL_ENV}}"
if [ -n "$VERBOSE" ]; then
echo " echo \"pyenv-virtualenv: deactivate ${prefix##*/}\" 1>&2;"
fi
if [ -n "${PYENV_ACTIVATE_SHELL}" ]; then
# shell version set in pyenv-sh-activate should be unset
# https://github.com/yyuu/pyenv-virtualenv/issues/61
echo " pyenv shell --unset;"
case "$shell" in
fish )
echo " set -e PYENV_ACTIVATE_SHELL;"
;;
* )
echo " unset PYENV_ACTIVATE_SHELL;"
;;
esac
fi
case "$shell" in case "$shell" in
fish ) fish )
cat <<EOS cat <<EOS
if functions -q deactivate setenv PYENV_DEACTIVATE "$prefix";
setenv PYENV_DEACTIVATE "\$VIRTUAL_ENV"; set -e PYENV_ACTIVATE;
deactivate; deactivate;
end; else;
EOS EOS
;; ;;
* ) * )
cat <<EOS cat <<EOS
if declare -f deactivate 1>/dev/null 2>&1; then export PYENV_DEACTIVATE="$prefix";
export PYENV_DEACTIVATE="\$VIRTUAL_ENV"; unset PYENV_ACTIVATE;
deactivate; deactivate;
fi; else
EOS EOS
;; ;;
esac esac
if [ -z "${PYENV_VIRTUALENV_INIT}" ]; then if [ -z "$NOERROR" ]; then
# Backward compatibility issue echo " echo \"pyenv-virtualenv: no virtualenv has been activated.\" 1>&2;"
# https://github.com/yyuu/pyenv-virtualenv/issues/26
echo "pyenv shell --unset;"
fi fi
echo " false;"
case "$shell" in
fish )
echo "end;"
;;
* )
echo "fi;"
;;
esac

View File

@@ -9,7 +9,7 @@
# -f/--force Install even if the version appears to be installed already # -f/--force Install even if the version appears to be installed already
# #
PYENV_VIRTUALENV_VERSION="20140615" PYENV_VIRTUALENV_VERSION="20141106"
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
@@ -185,28 +185,6 @@ build_package_ensurepip() {
pyenv-exec python -m ensurepip 2>/dev/null|| { pyenv-exec python -m ensurepip 2>/dev/null|| {
build_package_ez_setup "$@" && build_package_get_pip "$@" build_package_ez_setup "$@" && build_package_get_pip "$@"
} || return 1 } || return 1
create_symlinks "$(pyenv-exec python -c 'import sys;v=sys.version_info;sys.stdout.write("python%d.%d"%(v[0],v[1]))')"
}
create_symlinks() {
local suffix="$1"
local file link
shopt -s nullglob
for file in "${VIRTUALENV_PATH}/bin"/*; do
if [[ "${file##*/}" == *"${suffix}" ]]; then
if [[ "${file}" == *"-${suffix}" ]]; then
link="${file%%-${suffix}}"
else
link="${file%%${suffix}}"
fi
if [ ! -e "${link}" ]; then
( cd "${file%/*}" && ln -fs "${file##*/}" "${link##*/}" )
fi
fi
done
shopt -u nullglob
} }
prepare_requirements() { prepare_requirements() {
@@ -297,6 +275,11 @@ if [ -z "${VERSION_NAME}" ] || [ -z "${VIRTUALENV_NAME}" ]; then
usage 1 usage 1
fi fi
if [ "$VIRTUALENV_NAME" != "${VIRTUALENV_NAME%[[:space:]]*}" ]; then
echo "pyenv-virtualenv: no whitespace allowed in virtualenv name." 1>&2
exit 1
fi
# Set VERSION_NAME as default version in this script # Set VERSION_NAME as default version in this script
export PYENV_VERSION="${VERSION_NAME}" export PYENV_VERSION="${VERSION_NAME}"

View File

@@ -75,18 +75,23 @@ case "$shell" in
fish ) fish )
cat <<EOS cat <<EOS
function _pyenv_virtualenv_hook --on-event fish_prompt; function _pyenv_virtualenv_hook --on-event fish_prompt;
if [ -n "\$VIRTUAL_ENV" ] if [ -n "\$PYENV_ACTIVATE" ]
if [ (pyenv version-name) = "system" ] if [ (pyenv version-name 2>/dev/null; or true) = "system" ]
eval (pyenv sh-deactivate); or true pyenv deactivate --no-error --verbose
set -e PYENV_DEACTIVATE
return 0 return 0
end end
if [ "\$VIRTUAL_ENV" != (pyenv prefix) ] if [ "\$PYENV_ACTIVATE" != (pyenv prefix 2>/dev/null; or true) ]
eval (pyenv sh-deactivate); or true if pyenv deactivate --no-error --verbose
eval (pyenv sh-activate 2>/dev/null); or true set -e PYENV_DEACTIVATE
pyenv activate --no-error --verbose; or set -e PYENV_DEACTIVATE
else
pyenv activate --no-error --verbose
end
end end
else else
if [ "\$PYENV_DEACTIVATE" != (pyenv prefix) ] if [ -z "\$VIRTUAL_ENV" ]; and [ "\$PYENV_DEACTIVATE" != (pyenv prefix 2>/dev/null; or true) ]
eval (pyenv sh-activate 2>/dev/null); or true pyenv activate --no-error --verbose
end end
end end
end end
@@ -106,18 +111,23 @@ esac
if [[ "$shell" != "fish" ]]; then if [[ "$shell" != "fish" ]]; then
cat <<EOS cat <<EOS
if [ -n "\$VIRTUAL_ENV" ]; then if [ -n "\$PYENV_ACTIVATE" ]; then
if [ "x\`pyenv version-name\`" = "xsystem" ]; then if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then
pyenv deactivate || true pyenv deactivate --no-error --verbose
unset PYENV_DEACTIVATE
return 0 return 0
fi fi
if [ "x\$VIRTUAL_ENV" != "x\`pyenv prefix\`" ]; then if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
pyenv deactivate || true if pyenv deactivate --no-error --verbose; then
pyenv activate 2>/dev/null || true unset PYENV_DEACTIVATE
pyenv activate --no-error --verbose || unset PYENV_DEACTIVATE
else
pyenv activate --no-error --verbose
fi
fi fi
else else
if [ "x\$PYENV_DEACTIVATE" != "x\`pyenv prefix\`" ]; then if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
pyenv activate 2>/dev/null || true pyenv activate --no-error --verbose
fi fi
fi fi
}; };

View File

@@ -32,6 +32,10 @@ base_prefix() { # pyvenv
VIRTUALENV_PREFIX_PATHS=() VIRTUALENV_PREFIX_PATHS=()
for version in "${versions[@]}"; do for version in "${versions[@]}"; do
if [ "$version" = "system" ]; then
echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2
exit 1
fi
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}" || base_prefix "${version}" || true)" VIRTUALENV_PREFIX_PATH="$(real_prefix "${version}" || base_prefix "${version}" || true)"

View File

@@ -23,7 +23,30 @@ setup() {
assert_success assert_success
assert_output <<EOS assert_output <<EOS
unset PYENV_DEACTIVATE; unset PYENV_DEACTIVATE;
source "${PYENV_ROOT}/versions/venv/bin/activate"; export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv";
. "${PYENV_ROOT}/versions/venv/bin/activate";
EOS
}
@test "activate virtualenv from current version (verbose)" {
export PYENV_VIRTUALENV_INIT=1
stub pyenv-version-name "echo venv"
stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate --verbose
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success
assert_output <<EOS
pyenv-virtualenv: activate venv
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv";
. "${PYENV_ROOT}/versions/venv/bin/activate";
EOS EOS
} }
@@ -43,8 +66,10 @@ EOS
assert_success assert_success
assert_output <<EOS assert_output <<EOS
pyenv shell "venv"; pyenv shell "venv";
export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE; unset PYENV_DEACTIVATE;
source "${PYENV_ROOT}/versions/venv/bin/activate"; export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv";
. "${PYENV_ROOT}/versions/venv/bin/activate";
EOS EOS
} }
@@ -64,6 +89,7 @@ EOS
assert_success assert_success
assert_output <<EOS assert_output <<EOS
set -e PYENV_DEACTIVATE; set -e PYENV_DEACTIVATE;
setenv PYENV_ACTIVATE "${PYENV_ROOT}/versions/venv";
. "${PYENV_ROOT}/versions/venv/bin/activate.fish"; . "${PYENV_ROOT}/versions/venv/bin/activate.fish";
EOS EOS
} }
@@ -84,7 +110,9 @@ EOS
assert_success assert_success
assert_output <<EOS assert_output <<EOS
pyenv shell "venv"; pyenv shell "venv";
setenv PYENV_ACTIVATE_SHELL 1;
set -e PYENV_DEACTIVATE; set -e PYENV_DEACTIVATE;
setenv PYENV_ACTIVATE "${PYENV_ROOT}/versions/venv";
. "${PYENV_ROOT}/versions/venv/bin/activate.fish"; . "${PYENV_ROOT}/versions/venv/bin/activate.fish";
EOS EOS
} }
@@ -103,8 +131,10 @@ EOS
assert_success assert_success
assert_output <<EOS assert_output <<EOS
pyenv shell "venv27"; pyenv shell "venv27";
export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE; unset PYENV_DEACTIVATE;
source "${PYENV_ROOT}/versions/venv27/bin/activate"; export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv27";
. "${PYENV_ROOT}/versions/venv27/bin/activate";
EOS EOS
} }
@@ -122,8 +152,10 @@ EOS
assert_success assert_success
assert_output <<EOS assert_output <<EOS
pyenv shell "venv27"; pyenv shell "venv27";
export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE; unset PYENV_DEACTIVATE;
source "${PYENV_ROOT}/versions/venv27/bin/activate"; export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv27";
. "${PYENV_ROOT}/versions/venv27/bin/activate";
EOS EOS
} }
@@ -144,6 +176,23 @@ EOS
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
assert_failure assert_failure
assert_output <<EOS
pyenv-virtualenv: version \`3.3.3' is not a virtualenv
false
EOS
}
@test "should fail if the version is not a virtualenv (no-error)" {
stub pyenv-virtualenv-prefix "3.3.3 : false"
run pyenv-sh-activate --no-error "3.3.3"
unstub pyenv-virtualenv-prefix
assert_failure
assert_output <<EOS
false
EOS
} }
@test "should fail if there are multiple versions" { @test "should fail if there are multiple versions" {
@@ -152,6 +201,16 @@ EOS
assert_failure assert_failure
assert_output <<EOS assert_output <<EOS
pyenv-virtualenv: cannot activate multiple versions at once: venv venv27 pyenv-virtualenv: cannot activate multiple versions at once: venv venv27
false
EOS
}
@test "should fail if there are multiple versions (no-error)" {
run pyenv-sh-activate --no-error "venv" "venv27"
assert_failure
assert_output <<EOS
false
EOS EOS
} }

View File

@@ -7,60 +7,216 @@ setup() {
} }
@test "deactivate virtualenv" { @test "deactivate virtualenv" {
export PYENV_VIRTUALENV_INIT=1 export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="bash" run pyenv-sh-deactivate PYENV_SHELL="bash" run pyenv-sh-deactivate
assert_success assert_success
assert_output <<EOS assert_output <<EOS
if declare -f deactivate 1>/dev/null 2>&1; then if declare -f deactivate 1>/dev/null 2>&1; then
export PYENV_DEACTIVATE="\$VIRTUAL_ENV"; export PYENV_DEACTIVATE="$PYENV_ACTIVATE";
unset PYENV_ACTIVATE;
deactivate; deactivate;
else
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
fi; fi;
EOS EOS
} }
@test "deactivate virtualenv (without pyenv-virtualenv-init)" { @test "deactivate virtualenv (verbose)" {
export PYENV_VIRTUALENV_INIT= export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="bash" run pyenv-sh-deactivate --verbose
assert_success
assert_output <<EOS
if declare -f deactivate 1>/dev/null 2>&1; then
echo "pyenv-virtualenv: deactivate venv" 1>&2;
export PYENV_DEACTIVATE="$PYENV_ACTIVATE";
unset PYENV_ACTIVATE;
deactivate;
else
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
fi;
EOS
}
@test "deactivate virtualenv (no-error)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="bash" run pyenv-sh-deactivate --no-error
assert_success
assert_output <<EOS
if declare -f deactivate 1>/dev/null 2>&1; then
export PYENV_DEACTIVATE="$PYENV_ACTIVATE";
unset PYENV_ACTIVATE;
deactivate;
else
false;
fi;
EOS
}
@test "deactivate virtualenv (with shell activation)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=1
PYENV_SHELL="bash" run pyenv-sh-deactivate PYENV_SHELL="bash" run pyenv-sh-deactivate
assert_success assert_success
assert_output <<EOS assert_output <<EOS
if declare -f deactivate 1>/dev/null 2>&1; then if declare -f deactivate 1>/dev/null 2>&1; then
export PYENV_DEACTIVATE="\$VIRTUAL_ENV"; pyenv shell --unset;
unset PYENV_ACTIVATE_SHELL;
export PYENV_DEACTIVATE="$PYENV_ACTIVATE";
unset PYENV_ACTIVATE;
deactivate; deactivate;
else
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
fi;
EOS
}
@test "deactivate virtualenv (with shell activation) (no-error)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=1
PYENV_SHELL="bash" run pyenv-sh-deactivate --no-error
assert_success
assert_output <<EOS
if declare -f deactivate 1>/dev/null 2>&1; then
pyenv shell --unset;
unset PYENV_ACTIVATE_SHELL;
export PYENV_DEACTIVATE="$PYENV_ACTIVATE";
unset PYENV_ACTIVATE;
deactivate;
else
false;
fi;
EOS
}
@test "deactivate virtualenv which has been activated manually" {
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="bash" run pyenv-sh-deactivate
assert_success
assert_output <<EOS
if declare -f deactivate 1>/dev/null 2>&1; then
export PYENV_DEACTIVATE="$VIRTUAL_ENV";
unset PYENV_ACTIVATE;
deactivate;
else
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
fi; fi;
pyenv shell --unset;
EOS EOS
} }
@test "deactivate virtualenv (fish)" { @test "deactivate virtualenv (fish)" {
export PYENV_VIRTUALENV_INIT=1 export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="fish" run pyenv-sh-deactivate PYENV_SHELL="fish" run pyenv-sh-deactivate
assert_success assert_success
assert_output <<EOS assert_output <<EOS
if functions -q deactivate if functions -q deactivate;
setenv PYENV_DEACTIVATE "\$VIRTUAL_ENV"; setenv PYENV_DEACTIVATE "$PYENV_ACTIVATE";
set -e PYENV_ACTIVATE;
deactivate; deactivate;
else;
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
end; end;
EOS EOS
} }
@test "deactivate virtualenv (fish) (without pyenv-virtualenv-init)" { @test "deactivate virtualenv (fish) (no-error)" {
export PYENV_VIRTUALENV_INIT= export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="fish" run pyenv-sh-deactivate --no-error
assert_success
assert_output <<EOS
if functions -q deactivate;
setenv PYENV_DEACTIVATE "$PYENV_ACTIVATE";
set -e PYENV_ACTIVATE;
deactivate;
else;
false;
end;
EOS
}
@test "deactivate virtualenv (fish) (with shell activation)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=1
PYENV_SHELL="fish" run pyenv-sh-deactivate PYENV_SHELL="fish" run pyenv-sh-deactivate
assert_success assert_success
assert_output <<EOS assert_output <<EOS
if functions -q deactivate if functions -q deactivate;
setenv PYENV_DEACTIVATE "\$VIRTUAL_ENV"; pyenv shell --unset;
set -e PYENV_ACTIVATE_SHELL;
setenv PYENV_DEACTIVATE "$PYENV_ACTIVATE";
set -e PYENV_ACTIVATE;
deactivate; deactivate;
else;
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
end;
EOS
}
@test "deactivate virtualenv (fish) (with shell activation) (no-error)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=1
PYENV_SHELL="fish" run pyenv-sh-deactivate --no-error
assert_success
assert_output <<EOS
if functions -q deactivate;
pyenv shell --unset;
set -e PYENV_ACTIVATE_SHELL;
setenv PYENV_DEACTIVATE "$PYENV_ACTIVATE";
set -e PYENV_ACTIVATE;
deactivate;
else;
false;
end;
EOS
}
@test "deactivate virtualenv which has been activated manually (fish)" {
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="fish" run pyenv-sh-deactivate
assert_success
assert_output <<EOS
if functions -q deactivate;
setenv PYENV_DEACTIVATE "$VIRTUAL_ENV";
set -e PYENV_ACTIVATE;
deactivate;
else;
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
end; end;
pyenv shell --unset;
EOS EOS
} }

View File

@@ -31,18 +31,23 @@ load test_helper
assert_output <<EOS assert_output <<EOS
export PYENV_VIRTUALENV_INIT=1; export PYENV_VIRTUALENV_INIT=1;
_pyenv_virtualenv_hook() { _pyenv_virtualenv_hook() {
if [ -n "\$VIRTUAL_ENV" ]; then if [ -n "\$PYENV_ACTIVATE" ]; then
if [ "x\`pyenv version-name\`" = "xsystem" ]; then if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then
pyenv deactivate || true pyenv deactivate --no-error --verbose
unset PYENV_DEACTIVATE
return 0 return 0
fi fi
if [ "x\$VIRTUAL_ENV" != "x\`pyenv prefix\`" ]; then if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
pyenv deactivate || true if pyenv deactivate --no-error --verbose; then
pyenv activate 2>/dev/null || true unset PYENV_DEACTIVATE
pyenv activate --no-error --verbose || unset PYENV_DEACTIVATE
else
pyenv activate --no-error --verbose
fi
fi fi
else else
if [ "x\$PYENV_DEACTIVATE" != "x\`pyenv prefix\`" ]; then if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
pyenv activate 2>/dev/null || true pyenv activate --no-error --verbose
fi fi
fi fi
}; };
@@ -58,18 +63,23 @@ EOS
assert_output <<EOS assert_output <<EOS
setenv PYENV_VIRTUALENV_INIT 1; setenv PYENV_VIRTUALENV_INIT 1;
function _pyenv_virtualenv_hook --on-event fish_prompt; function _pyenv_virtualenv_hook --on-event fish_prompt;
if [ -n "\$VIRTUAL_ENV" ] if [ -n "\$PYENV_ACTIVATE" ]
if [ (pyenv version-name) = "system" ] if [ (pyenv version-name 2>/dev/null; or true) = "system" ]
eval (pyenv sh-deactivate); or true pyenv deactivate --no-error --verbose
set -e PYENV_DEACTIVATE
return 0 return 0
end end
if [ "\$VIRTUAL_ENV" != (pyenv prefix) ] if [ "\$PYENV_ACTIVATE" != (pyenv prefix 2>/dev/null; or true) ]
eval (pyenv sh-deactivate); or true if pyenv deactivate --no-error --verbose
eval (pyenv sh-activate 2>/dev/null); or true set -e PYENV_DEACTIVATE
pyenv activate --no-error --verbose; or set -e PYENV_DEACTIVATE
else
pyenv activate --no-error --verbose
end
end end
else else
if [ "\$PYENV_DEACTIVATE" != (pyenv prefix) ] if [ -z "\$VIRTUAL_ENV" ]; and [ "\$PYENV_DEACTIVATE" != (pyenv prefix 2>/dev/null; or true) ]
eval (pyenv sh-activate 2>/dev/null); or true pyenv activate --no-error --verbose
end end
end end
end end
@@ -82,18 +92,23 @@ EOS
assert_output <<EOS assert_output <<EOS
export PYENV_VIRTUALENV_INIT=1; export PYENV_VIRTUALENV_INIT=1;
_pyenv_virtualenv_hook() { _pyenv_virtualenv_hook() {
if [ -n "\$VIRTUAL_ENV" ]; then if [ -n "\$PYENV_ACTIVATE" ]; then
if [ "x\`pyenv version-name\`" = "xsystem" ]; then if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then
pyenv deactivate || true pyenv deactivate --no-error --verbose
unset PYENV_DEACTIVATE
return 0 return 0
fi fi
if [ "x\$VIRTUAL_ENV" != "x\`pyenv prefix\`" ]; then if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
pyenv deactivate || true if pyenv deactivate --no-error --verbose; then
pyenv activate 2>/dev/null || true unset PYENV_DEACTIVATE
pyenv activate --no-error --verbose || unset PYENV_DEACTIVATE
else
pyenv activate --no-error --verbose
fi
fi fi
else else
if [ "x\$PYENV_DEACTIVATE" != "x\`pyenv prefix\`" ]; then if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
pyenv activate 2>/dev/null || true pyenv activate --no-error --verbose
fi fi
fi fi
}; };

View File

@@ -26,8 +26,7 @@ unstub_pyenv() {
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'" stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'" stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-exec "pyvenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/venv/bin" stub pyenv-exec "pyvenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/venv/bin"
stub pyenv-exec "python -m ensurepip : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/venv/bin/pip3.4" stub pyenv-exec "python -m ensurepip : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/venv/bin/pip"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
remove_executable "3.4.1" "virtualenv" remove_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv" create_executable "3.4.1" "pyvenv"
@@ -54,8 +53,7 @@ OUT
stub pyenv-exec "pyvenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/venv/bin" stub pyenv-exec "pyvenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/venv/bin"
stub pyenv-exec "python -m ensurepip : false" stub pyenv-exec "python -m ensurepip : false"
stub pyenv-exec "python */ez_setup.py : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/venv/bin/easy_install" stub pyenv-exec "python */ez_setup.py : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/venv/bin/easy_install"
stub pyenv-exec "python */get-pip.py : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/venv/bin/pip3.3" stub pyenv-exec "python */get-pip.py : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/venv/bin/pip"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
stub curl true stub curl true
stub curl true stub curl true

View File

@@ -27,7 +27,6 @@ unstub_pyenv() {
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'" stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-exec "pyvenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "pyvenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -m ensurepip : true" stub pyenv-exec "python -m ensurepip : true"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
remove_executable "3.4.1" "virtualenv" remove_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv" create_executable "3.4.1" "pyvenv"
@@ -51,7 +50,6 @@ OUT
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'" stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-exec "virtualenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -m ensurepip : true" stub pyenv-exec "python -m ensurepip : true"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
create_executable "3.4.1" "virtualenv" create_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv" create_executable "3.4.1" "pyvenv"
@@ -78,7 +76,6 @@ OUT
stub pyenv-exec "python -m ensurepip : false" stub pyenv-exec "python -m ensurepip : false"
stub pyenv-exec "python */ez_setup.py : true" stub pyenv-exec "python */ez_setup.py : true"
stub pyenv-exec "python */get-pip.py : true" stub pyenv-exec "python */get-pip.py : true"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
stub curl true stub curl true
stub curl true stub curl true
@@ -109,7 +106,6 @@ OUT
stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "virtualenv --python=python3 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv --python=python3 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -m ensurepip : true" stub pyenv-exec "python -m ensurepip : true"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
remove_executable "3.4.1" "virtualenv" remove_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv" create_executable "3.4.1" "pyvenv"
@@ -135,7 +131,6 @@ OUT
stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "virtualenv --python=python3 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv --python=python3 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -m ensurepip : true" stub pyenv-exec "python -m ensurepip : true"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
remove_executable "3.4.1" "virtualenv" remove_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv" create_executable "3.4.1" "pyvenv"
@@ -163,7 +158,6 @@ OUT
stub pyenv-exec "python -m ensurepip : false" stub pyenv-exec "python -m ensurepip : false"
stub pyenv-exec "python */ez_setup.py : true" stub pyenv-exec "python */ez_setup.py : true"
stub pyenv-exec "python */get-pip.py : true" stub pyenv-exec "python */get-pip.py : true"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
stub curl true stub curl true
stub curl true stub curl true

View File

@@ -4,7 +4,7 @@ load test_helper
setup() { setup() {
export PYENV_ROOT="${TMP}/pyenv" export PYENV_ROOT="${TMP}/pyenv"
export PYENV_VIRTUALENV_VERSION="20140615" export PYENV_VIRTUALENV_VERSION="20141106"
} }
@test "display virtualenv version" { @test "display virtualenv version" {

View File

@@ -102,6 +102,19 @@ ${PYENV_ROOT}/versions/3.3.3:${PYENV_ROOT}/versions/3.4.0
OUT OUT
} }
@test "should fail if the version is the system" {
stub pyenv-version-name "echo system"
PYENV_VERSION="system" run pyenv-virtualenv-prefix
unstub pyenv-version-name
assert_failure
assert_output <<OUT
pyenv-virtualenv: version \`system' is not a virtualenv
OUT
}
@test "should fail if the version is not a virtualenv" { @test "should fail if the version is not a virtualenv" {
stub pyenv-version-name "echo 3.4.0" stub pyenv-version-name "echo 3.4.0"
stub pyenv-prefix "3.4.0 : echo \"${PYENV_ROOT}/versions/3.4.0\"" stub pyenv-prefix "3.4.0 : echo \"${PYENV_ROOT}/versions/3.4.0\""

View File

@@ -30,7 +30,6 @@ unstub_pyenv() {
stub pyenv-exec "python -m ensurepip : false" stub pyenv-exec "python -m ensurepip : false"
stub pyenv-exec "python */ez_setup.py : true" stub pyenv-exec "python */ez_setup.py : true"
stub pyenv-exec "python */get-pip.py : true" stub pyenv-exec "python */get-pip.py : true"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
stub curl true stub curl true
stub curl true stub curl true
@@ -57,7 +56,6 @@ OUT
stub pyenv-exec "python -m ensurepip : false" stub pyenv-exec "python -m ensurepip : false"
stub pyenv-exec "python */ez_setup.py : true" stub pyenv-exec "python */ez_setup.py : true"
stub pyenv-exec "python */get-pip.py : true" stub pyenv-exec "python */get-pip.py : true"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
stub curl true stub curl true
stub curl true stub curl true
@@ -85,7 +83,6 @@ OUT
stub pyenv-exec "python -m ensurepip : false" stub pyenv-exec "python -m ensurepip : false"
stub pyenv-exec "python */ez_setup.py : true" stub pyenv-exec "python */ez_setup.py : true"
stub pyenv-exec "python */get-pip.py : true" stub pyenv-exec "python */get-pip.py : true"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
stub curl true stub curl true
stub curl true stub curl true
@@ -113,7 +110,6 @@ OUT
stub pyenv-exec "python -m ensurepip : false" stub pyenv-exec "python -m ensurepip : false"
stub pyenv-exec "python */ez_setup.py : true" stub pyenv-exec "python */ez_setup.py : true"
stub pyenv-exec "python */get-pip.py : true" stub pyenv-exec "python */get-pip.py : true"
stub pyenv-exec "python -c * : echo ${PYENV_VERSION%.*}"
stub curl true stub curl true
stub curl true stub curl true
@@ -132,3 +128,21 @@ OUT
unstub pyenv-exec unstub pyenv-exec
unstub curl unstub curl
} }
@test "no whitespace allowed in virtualenv name" {
run pyenv-virtualenv "3.2.1" "foo bar"
assert_failure
assert_output <<OUT
pyenv-virtualenv: no whitespace allowed in virtualenv name.
OUT
}
@test "no tab allowed in virtualenv name" {
run pyenv-virtualenv "3.2.1" "foo bar baz"
assert_failure
assert_output <<OUT
pyenv-virtualenv: no whitespace allowed in virtualenv name.
OUT
}