37 Commits

Author SHA1 Message Date
Yamashita, Yuu
90531a6a48 v20150719 2015-07-19 18:22:34 +09:00
Yamashita, Yuu
a04522204d Update README 2015-07-19 18:17:49 +09:00
Yamashita, Yuu
c97ae36376 Merge pull request #91 from yyuu/conda-envs
Manage Anaconda/Miniconda environment as a pyenv version
2015-07-19 15:11:14 +09:00
Yamashita, Yuu
b32d357353 Add tests for conda 2015-07-19 15:01:04 +09:00
Yamashita, Yuu
cdbf7c9972 activate "root" environment of anaconda/miniconda if environment name is not given 2015-07-19 04:19:34 +09:00
Yamashita, Yuu
25395f0331 activate: look for a conda environment if given name is not a pyenv's prefix 2015-07-19 03:38:48 +09:00
Yamashita, Yuu
be6701e7b6 Fix Error: too many arguments. on deactivating anaconda env 2015-07-19 01:04:23 +09:00
Yamashita, Yuu
e1523811fb fix broken test 2015-07-19 00:08:12 +09:00
Yamashita, Yuu
65c74dbf2d activate/deactivate anaconda/miniconda envs 2015-07-19 00:08:09 +09:00
Yamashita, Yuu
6132f4228e *EXPERIMENTAL* a support for _envs_ created by anaconda/miniconda 2015-07-19 00:07:59 +09:00
Yamashita, Yuu
21239c9342 If the current virtualenv is created with --system-site-packages and
an executable is not found in it, automatically look up the executable
for source Python version. (fixes #62)
2015-07-18 20:39:56 +09:00
Yamashita, Yuu
1608344c56 Merge pull request #79 from blueyed/fix-shell-detection
init: fix shell detection when invoked from a script
2015-06-27 04:03:58 +09:00
Daniel Hahler
8ca45c0e0a init: fix shell detection when invoked from a script
- fixes `ps` command to lookup parent process
 - adds `assert_output_contains_not` test helper

Ref: https://github.com/yyuu/pyenv/issues/373
2015-06-26 20:47:08 +02:00
Yamashita Yuu
69fee6855d Show error message if the source version is not installed (#83) 2015-06-27 02:19:28 +09:00
Yamashita Yuu
e261806f96 Skip installing setuptools explicitly with using ez_setup.py (yyuu/pyenv#381)
It will be done by `get-pip.py` and we don't have to do anything explicitly.
2015-05-27 00:06:16 +09:00
Yamashita Yuu
9a52f9fb5d v20150526
First release after my son's birth....
2015-05-27 00:01:13 +09:00
Yamashita, Yuu
0ca01826e8 Merge pull request #78 from blueyed/shell-no-note-if-init
activate: do not display note if initialized already
2015-05-17 12:23:37 +09:00
Yamashita, Yuu
4fa9c7b220 Merge pull request #75 from blueyed/fix-zsh-typeset-precmd_functions
Use `typeset -g` with `precmd_functions`
2015-05-17 12:12:12 +09:00
Daniel Hahler
2571a2b973 activate: display setup instructions only with PYENV_VIRTUALENV_INIT=0
This fixes displaying the note, in case "init" has been run manually
and/or the init is not in the expected place.

It removes the unnecessary calls to "grep".

pyenv-virtualenv-init will look at `$PYENV_SHELL` now, too.

Tests have been adjusted/fixed.
2015-05-10 17:47:46 +02:00
Daniel Hahler
95fa7a35ad shell: do not use basename, but bash 2015-05-10 17:36:03 +02:00
Yamashita, Yuu
47cd86a165 Merge pull request #74 from blueyed/help-version-is-optional
Usage: version is optional
2015-04-28 17:19:46 +09:00
Yamashita, Yuu
d9c3f9a2f5 Merge pull request #73 from blueyed/fix-comments
minor: fix comments
2015-04-28 17:19:10 +09:00
Daniel Hahler
6bc0253d17 minor: fix comments 2015-04-28 10:17:02 +02:00
Daniel Hahler
c184c01174 Usage: version is optional 2015-04-28 10:13:59 +02:00
Yamashita, Yuu
55189357e2 Merge pull request #72 from sfilipov/patch-1
Link to English venv documentation
2015-04-24 10:15:15 +09:00
Simeon Filipov
9544c8b178 Link to English venv documentation
Currently the link to venv points to the Japanese version of the Python documentation.
Change this link to the English version of the Python documentation.
2015-04-24 01:51:15 +01:00
Yamashita, Yuu
bcb7abdf93 Merge pull request #68 from jawshooah/ignore-error-code
Ignore failure of pyenv activate
2015-03-19 12:18:19 +09:00
Josh Hagins
5953ddaf64 Ignore failure of pyenv activate
When the current pyenv environment is not a virtualenv, this line
exits with a return code of 1. This is annoying for those of us
who report the last return code in our own PROMPT_COMMAND, so
ignore the output of `pyenv activate` if we're not currently using
a virtualenv.
2015-03-18 22:30:19 -04:00
Daniel Hahler
2ab9483116 Use typeset -g with precmd_functions
This makes it possible to use `eval "$(pyenv virtualenv-init -)"` from a
function.
2015-03-14 02:37:14 +01:00
Yamashita Yuu
32e5a73345 v20150119 2015-01-19 00:53:19 +09:00
Yamashita Yuu
0fc9441f09 Anaconda has activate script nevertheless it is not a virtual environment (#65) 2015-01-18 20:15:44 +09:00
Yamashita, Yuu
0fe9aef635 Merge pull request #64 from wwwjfy/master
fix wrong output in test in fish, refs 240a1de
2015-01-06 14:05:52 +09:00
Tony Wang
e04a6f88fe fix wrong output in test in fish, refs 240a1de
"(any command)" is not supported in test in fish, we have to set a
variable and then use that
2015-01-06 11:10:43 +08:00
Yamashita, Yuu
08c2e6aee4 Merge pull request #63 from wwwjfy/master
fix warns for virtualenv-init corner case on fish
2015-01-06 10:20:53 +09:00
Tony Wang
cc7c9d22b5 fix failed tests running under fish 2015-01-05 23:28:14 +08:00
Tony Wang
240a1de6e5 fix warns for virtualenv-init corner case on fish
The situation is when in a directory containing python binary,
`pyenv prefix' will return empty (caused by `pyenv which' returning
"./python"). This change adds quotes for `test', otherwise `test' will
warn about missing argument.
2015-01-05 23:23:43 +08:00
Yamashita Yuu
9d71e67401 Merge branch 'issue61' 2014-12-28 18:50:25 +09:00
20 changed files with 681 additions and 151 deletions

120
README.md
View File

@@ -3,8 +3,8 @@
[![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 virtualenvs for Python that provides features to manage virtualenvs and conda environments
on UNIX-like systems. for Python 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
@@ -28,17 +28,24 @@ From inside that directory you can:
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. This is entirely optional but pretty useful. 2. (OPTIONAL) **Add `pyenv virtualenv-init` to your shell** to enable auto-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. **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 enable pyenv-virtualenv** 3. **Restart your shell to enable pyenv-virtualenv**
$ exec "$SHELL" ```
$ exec "$SHELL"
```
### Installing with Homebrew (for OS X users) ### Installing with Homebrew (for OS X users)
@@ -61,9 +68,8 @@ 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 After installation, you'll still need to add `eval "$(pyenv virtualenv-init -)"` to your profile (as stated in the caveats).
-)"` to your profile (as stated in the caveats). You'll only ever have to do You'll only ever have to do this once.
this once.
## Usage ## Usage
@@ -75,11 +81,11 @@ To create a virtualenv for the Python version used with pyenv, run
of the virtualenv directory. For example, of the virtualenv directory. For example,
``` ```
$ pyenv virtualenv 2.7.7 my-virtual-env-2.7.7 $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
``` ```
will create a virtualenv based on Python 2.7.7 under `~/.pyenv/versions` in a will create a virtualenv based on Python 2.7.10 under `~/.pyenv/versions` in a
folder called `my-virtual-env-2.7.7`. folder called `my-virtual-env-2.7.10`.
### Create virtualenv from current version ### Create virtualenv from current version
@@ -89,47 +95,53 @@ be created with the given name based on the current pyenv Python version.
``` ```
$ pyenv version $ pyenv version
3.4.2 (set by /home/yyuu/.pyenv/version) 3.4.3 (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 and `conda` environments.
``` ```
$ pyenv shell venv27 $ pyenv shell venv27
$ pyenv virtualenvs $ pyenv virtualenvs
* venv27 (created from /home/yyuu/.pyenv/versions/2.7.7) miniconda3-3.9.1 (created from /home/yyuu/.pyenv/versions/miniconda3-3.9.1)
venv34 (created from /home/yyuu/.pyenv/versions/3.4.1) miniconda3-3.9.1/envs/myenv (created from /home/yyuu/.pyenv/versions/miniconda3-3.9.1)
* venv27 (created from /home/yyuu/.pyenv/versions/2.7.10)
venv34 (created from /home/yyuu/.pyenv/versions/3.4.3)
``` ```
### Activate virtualenv ### Activate virtualenv
Some external tools (e.g. [jedi](https://github.com/davidhalter/jedi)) might Some external tools (e.g. [jedi](https://github.com/davidhalter/jedi)) might
require you to `activate` the virtualenv. require you to `activate` the virtualenv and `conda` environments.
`pyenv-virtualenv` will automatically activate/deactivate the virtualenv if `pyenv-virtualenv` will automatically activate/deactivate the virtualenv if
the `eval "$(pyenv virtualenv-init -)"` is properly configured in your shell. the `eval "$(pyenv virtualenv-init -)"` is properly configured in your shell.
You can also activate and deactivate a pyenv virtualenv manually: You can also activate and deactivate a pyenv virtualenv manually:
pyenv activate <name> ```sh
pyenv deactivate pyenv activate <name>
pyenv deactivate
```
### Delete existing virtualenv ### Delete existing virtualenv
Removing the directory in `~/.pyenv/versions` will delete the virtualenv, or you can run: Removing the directory in `~/.pyenv/versions` will delete the virtualenv, or you can run:
pyenv uninstall my-virtual-env ```sh
pyenv uninstall my-virtual-env
```
### virtualenv and pyvenv ### virtualenv and pyvenv
There is a [venv](http://docs.python.jp/3/library/venv.html) module available There is a [venv](http://docs.python.org/3/library/venv.html) module available
for CPython 3.3 and newer. for CPython 3.3 and newer.
It provides a command-line tool `pyvenv` which is the successor of `virtualenv` It provides a command-line tool `pyvenv` which is the successor of `virtualenv`
and distributed by default. and distributed by default.
@@ -138,6 +150,42 @@ and distributed by default.
command is not available. command is not available.
### Anaconda and Miniconda
Because Anaconda and Miniconda may install standard commands (e.g. `curl`, `openssl`, `sqlite3`, etc.) into their prefix,
we'd recommend you to install [pyenv-which-ext](https://github.com/yyuu/pyenv-which-ext).
You can manage `conda` environments by `conda env` as same manner as standard Anaconda/Miniconda installations.
To use those environments, you can use `pyenv activate` and `pyenv deactivate`.
```
(root)$ pyenv version
miniconda3-3.9.1 (set by /home/yyuu/.pyenv/version)
(root)$ conda env list
# conda environments:
#
myenv /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv
root * /home/yyuu/.pyenv/versions/miniconda3-3.9.1
(root)$ pyenv activate myenv
discarding /home/yyuu/.pyenv/versions/miniconda3-3.9.1/bin from PATH
prepending /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv/bin to PATH
(myenv)$ python --version
Python 3.4.3 :: Continuum Analytics, Inc.
(myenv)$ pyenv deactivate
discarding /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv/bin from PATH
```
You can use version like `miniconda3-3.9.1/envs/myenv` to specify `conda` environment as a version in pyenv.
```
(root)$ pyenv version
miniconda3-3.9.1 (set by /home/yyuu/.pyenv/version)
(root)$ pyenv shell miniconda3-3.9.1/envs/myenv
(myenv)$ which python
/home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv/bin/python
```
### Special environment variables ### Special environment variables
You can set certain environment variables to control pyenv-virtualenv. You can set certain environment variables to control pyenv-virtualenv.
@@ -147,16 +195,34 @@ You can set certain environment variables to control pyenv-virtualenv.
* `VIRTUALENV_VERSION`, if set, forces pyenv-virtualenv to install the desired * `VIRTUALENV_VERSION`, if set, forces pyenv-virtualenv to install the desired
version of virtualenv. If `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 over `virtualenv`, * `GET_PIP`, if set and `pyvenv` is preferred over `virtualenv`,
use `ez_setup.py` and `get_pip.py` from the specified location. use `get_pip.py` from the specified location.
* `EZ_SETUP_URL` and `GET_PIP_URL`, if set and `pyvenv` is preferred over * `GET_PIP_URL`, if set and `pyvenv` is preferred over
`virtualenv`, download `ez_setup.py` and `get_pip.py` from the specified URL. `virtualenv`, download `get_pip.py` from the specified URL.
* `SETUPTOOLS_VERSION` and `PIP_VERSION`, if set and `pyvenv` is preferred * `PIP_VERSION`, if set and `pyvenv` is preferred
over `virtualenv`, install the specified version of setuptools and pip. over `virtualenv`, install the specified version of pip.
## Version History ## Version History
#### 20150719
* Add support for `conda` environments created by Anaconda/Miniconda (#91)
* Look up commands for original version as well if the environment is created with `--system-site-packages` (#62)
* Add error message if the source version is not installed (#83)
#### 20150526
* Use `typeset -g` with `precmd_functions` (#75)
* activate: display setup instructions only with `PYENV_VIRTUALENV_INIT=0` (#78)
* Ignore failure of pyenv activate (#68)
#### 20150119
* Ignore errors from `pyenv-version-name` since it might fail if there is configuration error (yyuu/pyenv#291)
* The _shell_ version set in `activate` should be unset in `deactivate` (#61)
* Anaconda has `activate` script nevertheless it is not a virtual environment (#65)
#### 20141106 #### 20141106
* Stop creating after `ensurepip` since it has done by `ensurepip` itself * Stop creating after `ensurepip` since it has done by `ensurepip` itself

View File

@@ -62,33 +62,47 @@ if [ "${#versions[@]}" -gt 1 ]; then
exit 1 exit 1
fi fi
if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then if pyenv-prefix "${versions}" 1>/dev/null 2>&1; then
[ -n "$NOERROR" ] || echo "pyenv-virtualenv: version \`${versions}' is not a virtualenv" 1>&2 if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then
echo "false" [ -n "$NOERROR" ] || echo "pyenv-virtualenv: version \`${versions}' is not a virtualenv" 1>&2
exit 1 echo "false"
exit 1
fi
else
version="$(pyenv-version-name)"
if [[ "${versions}" == "root" ]]; then
versions="${version%/envs/*}"
else
versions="${version%/envs/*}/envs/${versions}"
fi
if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then
[ -n "$NOERROR" ] || echo "pyenv-virtualenv: version \`${versions}' is not an environment of anaconda/miniconda" 1>&2
echo "false"
exit 1
fi
fi fi
shell="$(basename "${PYENV_SHELL:-$SHELL}")" shell="${PYENV_SHELL:-${SHELL##*/}}"
case "$shell" in prefix="$(pyenv-prefix "${versions}")"
bash )
profile="$HOME/.bash_profile"
;;
zsh )
profile="$HOME/.zshrc"
;;
ksh )
profile="$HOME/.profile"
;;
fish )
profile="$HOME/.config/fish/config.fish"
;;
* )
profile="$HOME/.profile"
;;
esac
# Display setup instruction if 'pyenv virtualenv-init -' is not found in "$profile" unset conda_env
if [ -f "$profile" ] && grep -q 'pyenv init -' "$profile" && ! grep -q 'pyenv virtualenv-init -' "$profile"; then
if [ -f "${prefix}/bin/conda" ]; then
if [[ "$shell" != "bash" ]] && [[ "$shell" != "zsh" ]]; then
[ -n "$NOERROR" ] || echo "pyenv-virtualenv: Only bash and zsh are supported by Anaconda/Miniconda" 1>&2
echo "false"
exit 1
fi
if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then
conda_env="${prefix##*/envs/}"
else
conda_env="root"
fi
fi
# Display setup instruction, if pyenv-virtualenv has not been initialized.
# if 'pyenv virtualenv-init -' is not found in "$profile"
if [ -z "$PYENV_VIRTUALENV_INIT" ]; then
pyenv-virtualenv-init >&2 || true pyenv-virtualenv-init >&2 || true
fi fi
@@ -110,20 +124,29 @@ if [ -z "$no_shell" ]; then
esac esac
fi fi
prefix="$(pyenv-prefix "${versions}")" if [ -n "${conda_env}" ]; then
case "$shell" in # anaconda/miniconda
fish )
cat <<EOS cat <<EOS
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${prefix}";
. "${prefix%/envs/*}/bin/activate" "${conda_env}";
EOS
else
# virtualenv/pyvenv
case "$shell" in
fish )
cat <<EOS
set -e PYENV_DEACTIVATE; set -e PYENV_DEACTIVATE;
setenv PYENV_ACTIVATE "${prefix}"; setenv PYENV_ACTIVATE "${prefix}";
. "${prefix}/bin/activate.fish"; . "${prefix}/bin/activate.fish";
EOS EOS
;; ;;
* ) * )
cat <<EOS cat <<EOS
unset PYENV_DEACTIVATE; unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${prefix}"; export PYENV_ACTIVATE="${prefix}";
. "${prefix}/bin/activate"; . "${prefix}/bin/activate";
EOS EOS
;; ;;
esac esac
fi

View File

@@ -28,17 +28,36 @@ while [ $# -gt 0 ]; do
done 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}}" prefix="${PYENV_ACTIVATE:-${VIRTUAL_ENV}}"
unset conda_env
if [ -f "${prefix}/bin/conda" ]; then
if [[ "$shell" != "bash" ]] && [[ "$shell" != "zsh" ]]; then
[ -n "$NOERROR" ] || echo "pyenv-virtualenv: Only bash and zsh are supported by Anaconda/Miniconda" 1>&2
echo "false"
exit 1
fi
if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then
conda_env="${prefix##*/envs/}"
else
conda_env="root"
fi
fi
if [ -n "${conda_env}" ]; then
echo "if [ -f \"${prefix%/envs/*}/bin/deactivate\" ]; then"
else
case "$shell" in
fish )
echo "if functions -q deactivate;"
;;
* )
echo "if declare -f deactivate 1>/dev/null 2>&1; then"
;;
esac
fi
if [ -n "$VERBOSE" ]; then if [ -n "$VERBOSE" ]; then
echo " echo \"pyenv-virtualenv: deactivate ${prefix##*/}\" 1>&2;" echo " echo \"pyenv-virtualenv: deactivate ${prefix##*/}\" 1>&2;"
fi fi
@@ -57,24 +76,33 @@ if [ -n "${PYENV_ACTIVATE_SHELL}" ]; then
esac esac
fi fi
case "$shell" in if [ -n "${conda_env}" ]; then
fish )
cat <<EOS cat <<EOS
export PYENV_DEACTIVATE="$prefix";
unset PYENV_ACTIVATE;
. "${prefix%/envs/*}/bin/deactivate";
else
EOS
else
case "$shell" in
fish )
cat <<EOS
setenv PYENV_DEACTIVATE "$prefix"; setenv PYENV_DEACTIVATE "$prefix";
set -e PYENV_ACTIVATE; set -e PYENV_ACTIVATE;
deactivate; deactivate;
else; else;
EOS EOS
;; ;;
* ) * )
cat <<EOS cat <<EOS
export PYENV_DEACTIVATE="$prefix"; export PYENV_DEACTIVATE="$prefix";
unset PYENV_ACTIVATE; unset PYENV_ACTIVATE;
deactivate; deactivate;
else else
EOS EOS
;; ;;
esac esac
fi
if [ -z "$NOERROR" ]; then if [ -z "$NOERROR" ]; then
echo " echo \"pyenv-virtualenv: no virtualenv has been activated.\" 1>&2;" echo " echo \"pyenv-virtualenv: no virtualenv has been activated.\" 1>&2;"

View File

@@ -2,14 +2,14 @@
# #
# Summary: Create a Python virtualenv using the pyenv-virtualenv plugin # Summary: Create a Python virtualenv using the pyenv-virtualenv plugin
# #
# Usage: pyenv virtualenv [-f|--force] [VIRTUALENV_OPTIONS] <version> <virtualenv-name> # Usage: pyenv virtualenv [-f|--force] [VIRTUALENV_OPTIONS] [version] <virtualenv-name>
# pyenv virtualenv --version # pyenv virtualenv --version
# pyenv virtualenv --help # pyenv virtualenv --help
# #
# -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="20141106" PYENV_VIRTUALENV_VERSION="20150719"
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
@@ -182,9 +182,7 @@ build_package_get_pip() {
} }
build_package_ensurepip() { build_package_ensurepip() {
pyenv-exec python -m ensurepip 2>/dev/null|| { pyenv-exec python -m ensurepip 2>/dev/null || build_package_get_pip "$@" || return 1
build_package_ez_setup "$@" && build_package_get_pip "$@"
} || return 1
} }
prepare_requirements() { prepare_requirements() {
@@ -283,8 +281,11 @@ 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}"
# Source version must exists before creating virtualenv # Source version must exist before creating virtualenv.
pyenv-prefix 1>/dev/null 2>&1 || usage 1 if ! pyenv-prefix 1>/dev/null 2>&1; then
echo "pyenv-virtualenv: \`${PYENV_VERSION}' is not installed in pyenv." 1>&2
exit 1
fi
if [ -z "$TMPDIR" ]; then if [ -z "$TMPDIR" ]; then
TMP="/tmp" TMP="/tmp"
@@ -328,12 +329,12 @@ else
fi fi
fi fi
# Unset environment variables which starts with `VIRTUALENV_`. # Unset environment variables which start with `VIRTUALENV_`.
# These variables are reserved for virtualenv. # These variables are reserved for virtualenv.
unset VIRTUALENV_VERSION unset VIRTUALENV_VERSION
# Download specified version of ez_setup.py/get-pip.py # Download specified version of ez_setup.py/get-pip.py.
if [ -n "${SETUPTOOLS_VERSION}" ]; then if [ -n "${SETUPTOOLS_VERSION}" ]; then
EZ_SETUP_URL="https://bitbucket.org/pypa/setuptools/raw/${SETUPTOOLS_VERSION}/ez_setup.py" EZ_SETUP_URL="https://bitbucket.org/pypa/setuptools/raw/${SETUPTOOLS_VERSION}/ez_setup.py"
fi fi
@@ -396,19 +397,19 @@ trap cleanup SIGINT
# Invoke virtualenv and record exit status in $STATUS. # Invoke virtualenv and record exit status in $STATUS.
STATUS=0 STATUS=0
# virtualenv may download distribute/setuptools in current directory. # virtualenv may download distribute/setuptools into the current directory.
# change to cache directory to reuse them between invocation. # Change to cache directory to reuse them between invocations.
mkdir -p "${PYENV_VIRTUALENV_CACHE_PATH}" mkdir -p "${PYENV_VIRTUALENV_CACHE_PATH}"
cd "${PYENV_VIRTUALENV_CACHE_PATH}" cd "${PYENV_VIRTUALENV_CACHE_PATH}"
venv $QUIET $VERBOSE "${VIRTUALENV_OPTIONS[@]}" "${VIRTUALENV_PATH}" || STATUS="$?" venv $QUIET $VERBOSE "${VIRTUALENV_OPTIONS[@]}" "${VIRTUALENV_PATH}" || STATUS="$?"
## Install setuptools and pip ## Install setuptools and pip.
PYENV_VERSION="${VIRTUALENV_NAME}" build_package_ensurepip PYENV_VERSION="${VIRTUALENV_NAME}" build_package_ensurepip
## Migrate previously installed packages from requirements.txt ## Migrate previously installed packages from requirements.txt.
PYENV_VERSION="${VIRTUALENV_NAME}" install_requirements || true PYENV_VERSION="${VIRTUALENV_NAME}" install_requirements || true
# Execute `after_virtualenv` hooks # Execute `after_virtualenv` hooks.
for hook in "${after_hooks[@]}"; do eval "$hook"; done for hook in "${after_hooks[@]}"; do eval "$hook"; done
# Run `pyenv-rehash` after a successful installation. # Run `pyenv-rehash` after a successful installation.

View File

@@ -18,12 +18,13 @@ do
fi fi
done done
shell="$1" shell="${1:-$PYENV_SHELL}"
if [ -z "$shell" ]; then if [ -z "$shell" ]; then
shell="$(ps c -p "$PPID" -o 'ucomm=' 2>/dev/null || true)" shell="$(ps -p "$PPID" -o 'args=' 2>/dev/null || true)"
shell="${shell##-}" shell="${shell##-}"
shell="${shell%% *}" shell="${shell%% *}"
shell="$(basename "${shell:-$SHELL}")" shell="${shell:-$SHELL}"
shell="${shell##*/}"
fi fi
if [ -z "$print" ]; then if [ -z "$print" ]; then
@@ -75,13 +76,14 @@ 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;
set -l PYENV_PREFIX (pyenv prefix 2>/dev/null; or true)
if [ -n "\$PYENV_ACTIVATE" ] if [ -n "\$PYENV_ACTIVATE" ]
if [ (pyenv version-name 2>/dev/null; or true) = "system" ] if [ "(pyenv version-name 2>/dev/null; or true)" = "system" ]
pyenv deactivate --no-error --verbose pyenv deactivate --no-error --verbose
set -e PYENV_DEACTIVATE set -e PYENV_DEACTIVATE
return 0 return 0
end end
if [ "\$PYENV_ACTIVATE" != (pyenv prefix 2>/dev/null; or true) ] if [ "\$PYENV_ACTIVATE" != "\$PYENV_PREFIX" ]
if pyenv deactivate --no-error --verbose if pyenv deactivate --no-error --verbose
set -e PYENV_DEACTIVATE set -e PYENV_DEACTIVATE
pyenv activate --no-error --verbose; or set -e PYENV_DEACTIVATE pyenv activate --no-error --verbose; or set -e PYENV_DEACTIVATE
@@ -90,8 +92,8 @@ function _pyenv_virtualenv_hook --on-event fish_prompt;
end end
end end
else else
if [ -z "\$VIRTUAL_ENV" ]; and [ "\$PYENV_DEACTIVATE" != (pyenv prefix 2>/dev/null; or true) ] if [ -z "\$VIRTUAL_ENV" ]; and [ "\$PYENV_DEACTIVATE" != "\$PYENV_PREFIX" ]
pyenv activate --no-error --verbose pyenv activate --no-error --verbose; or true
end end
end end
end end
@@ -113,21 +115,21 @@ if [[ "$shell" != "fish" ]]; then
cat <<EOS cat <<EOS
if [ -n "\$PYENV_ACTIVATE" ]; then if [ -n "\$PYENV_ACTIVATE" ]; then
if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then
pyenv deactivate --no-error --verbose eval "\$(pyenv sh-deactivate --no-error --verbose)"
unset PYENV_DEACTIVATE unset PYENV_DEACTIVATE
return 0 return 0
fi fi
if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
if pyenv deactivate --no-error --verbose; then if eval "\$(pyenv sh-deactivate --no-error --verbose)"; then
unset PYENV_DEACTIVATE unset PYENV_DEACTIVATE
pyenv activate --no-error --verbose || unset PYENV_DEACTIVATE eval "\$(pyenv sh-activate --no-error --verbose)" || unset PYENV_DEACTIVATE
else else
pyenv activate --no-error --verbose eval "\$(pyenv sh-activate --no-error --verbose)"
fi fi
fi fi
else else
if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
pyenv activate --no-error --verbose eval "\$(pyenv sh-activate --no-error --verbose)" || true
fi fi
fi fi
}; };
@@ -143,7 +145,7 @@ EOS
;; ;;
zsh ) zsh )
cat <<EOS cat <<EOS
typeset -a precmd_functions typeset -g -a precmd_functions
if [[ -z \$precmd_functions[(r)_pyenv_virtualenv_hook] ]]; then if [[ -z \$precmd_functions[(r)_pyenv_virtualenv_hook] ]]; then
precmd_functions+=_pyenv_virtualenv_hook; precmd_functions+=_pyenv_virtualenv_hook;
fi fi

View File

@@ -31,15 +31,31 @@ base_prefix() { # pyvenv
} }
VIRTUALENV_PREFIX_PATHS=() VIRTUALENV_PREFIX_PATHS=()
for version in "${versions[@]}"; do for version_string in "${versions[@]}"; do
version="${version_string%%/*}"
if [ "$version" = "system" ]; then if [ "$version" = "system" ]; then
echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2 echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2
exit 1 exit 1
fi 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)" # Anaconda has `activate` script nevertheless it is not a virtual environment (#65)
VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "$VIRTUALENV_PREFIX_PATH") if [ -f "${PREFIX}/bin/conda" ]; then
if [[ "${version_string}" != "${version_string%/envs/*}" ]]; then
conda_env="${version_string##*/envs/}"
if [ -f "${PREFIX}/envs/${conda_env}/bin/conda" ]; then
VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "${PREFIX}")
else
echo "pyenv-virtualenv: version \`${version_string}' is not an environment of anaconda/miniconda" 1>&2
exit 1
fi
else
VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "${PREFIX}")
fi
else
VIRTUALENV_PREFIX_PATH="$(real_prefix "${version}" || base_prefix "${version}" || true)"
VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "$VIRTUALENV_PREFIX_PATH")
fi
else else
echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2 echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2
exit 1 exit 1

View File

@@ -51,6 +51,15 @@ for version in $(pyenv-versions --bare); do
virtualenv_prefix="$(pyenv-virtualenv-prefix "${version}" 2>/dev/null || true)" virtualenv_prefix="$(pyenv-virtualenv-prefix "${version}" 2>/dev/null || true)"
if [ -d "${virtualenv_prefix}" ]; then if [ -d "${virtualenv_prefix}" ]; then
print_version "${version}" " (created from ${virtualenv_prefix})" print_version "${version}" " (created from ${virtualenv_prefix})"
prefix="$(pyenv-prefix "${version}")"
if [ -f "${prefix}/bin/conda" ]; then
# envs of anaconda/miniconda
shopt -s nullglob
for conda_env in "${prefix}/envs/"*; do
print_version "${version##*/}${conda_env#${prefix}}" " (created from ${prefix})"
done
shopt -u nullglob
fi
fi fi
fi fi
done done

View File

@@ -0,0 +1,20 @@
# if virtualenv is created with `--system-site-packages`,
# looks up executables for source version as well if none is
# installed in the virtualenv.
# https://github.com/yyuu/pyenv-virtualenv/issues/62
if [ ! -x "${PYENV_COMMAND_PATH}" ]; then
virtualenv_prefix="$(pyenv-virtualenv-prefix 2>/dev/null || true)"
if [ -d "${virtualenv_prefix}" ]; then
shopt -s nullglob
no_global_site_packages="$(echo "$(pyenv-prefix)/lib/"*"/no-global-site-packages.txt")"
shopt -u nullglob
if [ ! -f "${no_global_site_packages}" ]; then
# virtualenv is created with `--system-site-packages`
virtualenv_command_path="${virtualenv_prefix}/bin/${PYENV_COMMAND_PATH##*/}"
if [ -x "${virtualenv_command_path}" ]; then
PYENV_COMMAND_PATH="${virtualenv_command_path}"
fi
fi
fi
fi

View File

@@ -13,6 +13,7 @@ setup() {
stub pyenv-version-name "echo venv" stub pyenv-version-name "echo venv"
stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-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 PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate
@@ -34,6 +35,7 @@ EOS
stub pyenv-version-name "echo venv" stub pyenv-version-name "echo venv"
stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-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 PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate --verbose
@@ -56,6 +58,7 @@ EOS
stub pyenv-version-name "echo venv" stub pyenv-version-name "echo venv"
stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-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 PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate
@@ -65,6 +68,11 @@ EOS
assert_success assert_success
assert_output <<EOS assert_output <<EOS
# Load pyenv-virtualenv automatically by adding
# the following to ~/.bash_profile:
eval "\$(pyenv virtualenv-init -)"
pyenv shell "venv"; pyenv shell "venv";
export PYENV_ACTIVATE_SHELL=1; export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE; unset PYENV_DEACTIVATE;
@@ -79,6 +87,7 @@ EOS
stub pyenv-version-name "echo venv" stub pyenv-version-name "echo venv"
stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate
@@ -100,6 +109,7 @@ EOS
stub pyenv-version-name "echo venv" stub pyenv-version-name "echo venv"
stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate
@@ -109,6 +119,11 @@ EOS
assert_success assert_success
assert_output <<EOS assert_output <<EOS
# Load pyenv-virtualenv automatically by adding
# the following to ~/.config/fish/config.fish:
status --is-interactive; and . (pyenv virtualenv-init -|psub)
pyenv shell "venv"; pyenv shell "venv";
setenv PYENV_ACTIVATE_SHELL 1; setenv PYENV_ACTIVATE_SHELL 1;
set -e PYENV_DEACTIVATE; set -e PYENV_DEACTIVATE;
@@ -122,8 +137,9 @@ EOS
stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
run pyenv-sh-activate "venv27" PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate "venv27"
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-prefix
@@ -143,8 +159,36 @@ EOS
stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
run pyenv-sh-activate "venv27" PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate "venv27"
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success
assert_output <<EOS
# Load pyenv-virtualenv automatically by adding
# the following to ~/.bash_profile:
eval "\$(pyenv virtualenv-init -)"
pyenv shell "venv27";
export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv27";
. "${PYENV_ROOT}/versions/venv27/bin/activate";
EOS
}
@test "activate virtualenv from command-line argument (fish)" {
export PYENV_VIRTUALENV_INIT=1
stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate "venv27"
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-prefix
@@ -152,10 +196,37 @@ EOS
assert_success assert_success
assert_output <<EOS assert_output <<EOS
pyenv shell "venv27"; pyenv shell "venv27";
export PYENV_ACTIVATE_SHELL=1; setenv PYENV_ACTIVATE_SHELL 1;
unset PYENV_DEACTIVATE; set -e PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv27"; setenv PYENV_ACTIVATE "${PYENV_ROOT}/versions/venv27";
. "${PYENV_ROOT}/versions/venv27/bin/activate"; . "${PYENV_ROOT}/versions/venv27/bin/activate.fish";
EOS
}
@test "activate virtualenv from command-line argument (fish) (without pyenv-virtualenv-init)" {
export PYENV_VIRTUALENV_INIT=
stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate "venv27"
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success
assert_output <<EOS
# Load pyenv-virtualenv automatically by adding
# the following to ~/.config/fish/config.fish:
status --is-interactive; and . (pyenv virtualenv-init -|psub)
pyenv shell "venv27";
setenv PYENV_ACTIVATE_SHELL 1;
set -e PYENV_DEACTIVATE;
setenv PYENV_ACTIVATE "${PYENV_ROOT}/versions/venv27";
. "${PYENV_ROOT}/versions/venv27/bin/activate.fish";
EOS EOS
} }
@@ -170,10 +241,12 @@ EOS
@test "should fail if the version is not a virtualenv" { @test "should fail if the version is not a virtualenv" {
stub pyenv-virtualenv-prefix "3.3.3 : false" stub pyenv-virtualenv-prefix "3.3.3 : false"
stub pyenv-prefix "3.3.3 : echo \"${PYENV_ROOT}/versions/3.3.3\""
run pyenv-sh-activate "3.3.3" run pyenv-sh-activate "3.3.3"
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_failure assert_failure
assert_output <<EOS assert_output <<EOS
@@ -184,10 +257,12 @@ EOS
@test "should fail if the version is not a virtualenv (no-error)" { @test "should fail if the version is not a virtualenv (no-error)" {
stub pyenv-virtualenv-prefix "3.3.3 : false" stub pyenv-virtualenv-prefix "3.3.3 : false"
stub pyenv-prefix "3.3.3 : echo \"${PYENV_ROOT}/versions/3.3.3\""
run pyenv-sh-activate --no-error "3.3.3" run pyenv-sh-activate --no-error "3.3.3"
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_failure assert_failure
assert_output <<EOS assert_output <<EOS

149
test/conda-activate.bats Normal file
View File

@@ -0,0 +1,149 @@
#!/usr/bin/env bats
load test_helper
setup() {
export HOME="${TMP}"
export PYENV_ROOT="${TMP}/pyenv"
}
@test "activate conda root from current version" {
export PYENV_VIRTUALENV_INIT=1
create_conda "anaconda-2.3.0"
stub pyenv-version-name "echo anaconda-2.3.0"
stub pyenv-virtualenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\""
stub pyenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\""
stub pyenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\""
PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0" run pyenv-sh-activate
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success
assert_output <<EOS
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0";
. "${PYENV_ROOT}/versions/anaconda-2.3.0/bin/activate" "root";
EOS
}
@test "activate conda root from current version (fish)" {
export PYENV_VIRTUALENV_INIT=1
create_conda "anaconda-2.3.0"
stub pyenv-version-name "echo anaconda-2.3.0"
stub pyenv-virtualenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\""
stub pyenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\""
stub pyenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\""
PYENV_SHELL="fish" PYENV_VERSION="anaconda-2.3.0" run pyenv-sh-activate
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_failure
assert_output <<EOS
pyenv-virtualenv: Only bash and zsh are supported by Anaconda/Miniconda
false
EOS
}
@test "activate conda root from command-line argument" {
export PYENV_VIRTUALENV_INIT=1
create_conda "anaconda-2.3.0"
create_conda "miniconda-3.9.1"
stub pyenv-virtualenv-prefix "miniconda-3.9.1 : echo \"${PYENV_ROOT}/versions/miniconda-3.9.1\""
stub pyenv-prefix "miniconda-3.9.1 : echo \"${PYENV_ROOT}/versions/miniconda-3.9.1\""
stub pyenv-prefix "miniconda-3.9.1 : echo \"${PYENV_ROOT}/versions/miniconda-3.9.1\""
PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0" run pyenv-sh-activate "miniconda-3.9.1"
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success
assert_output <<EOS
pyenv shell "miniconda-3.9.1";
export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/miniconda-3.9.1";
. "${PYENV_ROOT}/versions/miniconda-3.9.1/bin/activate" "root";
EOS
}
@test "activate conda env from current version" {
export PYENV_VIRTUALENV_INIT=1
create_conda "anaconda-2.3.0" "foo"
stub pyenv-version-name "echo anaconda-2.3.0/envs/foo"
stub pyenv-virtualenv-prefix "anaconda-2.3.0/envs/foo : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo\""
stub pyenv-prefix "anaconda-2.3.0/envs/foo : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo\""
stub pyenv-prefix "anaconda-2.3.0/envs/foo : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo\""
PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0/envs/foo" run pyenv-sh-activate
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success
assert_output <<EOS
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo";
. "${PYENV_ROOT}/versions/anaconda-2.3.0/bin/activate" "foo";
EOS
}
@test "activate conda env from command-line argument" {
export PYENV_VIRTUALENV_INIT=1
create_conda "anaconda-2.3.0" "foo"
create_conda "miniconda-3.9.1" "bar"
stub pyenv-virtualenv-prefix "miniconda-3.9.1/envs/bar : echo \"${PYENV_ROOT}/versions/miniconda-3.9.1\""
stub pyenv-prefix "miniconda-3.9.1/envs/bar : echo \"${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar\""
stub pyenv-prefix "miniconda-3.9.1/envs/bar : echo \"${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar\""
PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0/envs/foo" run pyenv-sh-activate "miniconda-3.9.1/envs/bar"
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success
assert_output <<EOS
pyenv shell "miniconda-3.9.1/envs/bar";
export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar";
. "${PYENV_ROOT}/versions/miniconda-3.9.1/bin/activate" "bar";
EOS
}
@test "activate conda env from command-line argument in short-form" {
export PYENV_VIRTUALENV_INIT=1
create_conda "miniconda-3.9.1" "bar"
stub pyenv-prefix "bar : false"
stub pyenv-version-name " : echo miniconda-3.9.1"
stub pyenv-virtualenv-prefix "miniconda-3.9.1/envs/bar : echo \"${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar\""
stub pyenv-prefix "miniconda-3.9.1/envs/bar : echo \"${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar\""
PYENV_SHELL="bash" PYENV_VERSION="miniconda-3.9.1" run pyenv-sh-activate "bar"
unstub pyenv-prefix
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
assert_success
assert_output <<EOS
pyenv shell "miniconda-3.9.1/envs/bar";
export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar";
. "${PYENV_ROOT}/versions/miniconda-3.9.1/bin/activate" "bar";
EOS
}

View File

@@ -0,0 +1,64 @@
#!/usr/bin/env bats
load test_helper
setup() {
export PYENV_ROOT="${TMP}/pyenv"
}
@test "deactivate conda root" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0"
export PYENV_ACTIVATE_SHELL=
create_conda "anaconda-2.3.0"
PYENV_SHELL="bash" run pyenv-sh-deactivate
assert_success
assert_output <<EOS
if [ -f "${PYENV_ROOT}/versions/anaconda-2.3.0/bin/deactivate" ]; then
export PYENV_DEACTIVATE="$PYENV_ACTIVATE";
unset PYENV_ACTIVATE;
. "${PYENV_ROOT}/versions/anaconda-2.3.0/bin/deactivate";
else
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
fi;
EOS
}
@test "deactivate conda root (fish)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0"
export PYENV_ACTIVATE_SHELL=
create_conda "anaconda-2.3.0"
PYENV_SHELL="fish" run pyenv-sh-deactivate
assert_failure
assert_output <<EOS
pyenv-virtualenv: Only bash and zsh are supported by Anaconda/Miniconda
false
EOS
}
@test "deactivate conda env" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo"
export PYENV_ACTIVATE_SHELL=
create_conda "anaconda-2.3.0" "foo"
PYENV_SHELL="bash" run pyenv-sh-deactivate
assert_success
assert_output <<EOS
if [ -f "${PYENV_ROOT}/versions/anaconda-2.3.0/bin/deactivate" ]; then
export PYENV_DEACTIVATE="$PYENV_ACTIVATE";
unset PYENV_ACTIVATE;
. "${PYENV_ROOT}/versions/anaconda-2.3.0/bin/deactivate";
else
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
fi;
EOS
}

View File

@@ -0,0 +1,41 @@
#!/usr/bin/env bats
load test_helper
setup() {
export PYENV_ROOT="${TMP}/pyenv"
}
@test "display conda root" {
create_conda "anaconda-2.3.0"
stub pyenv-version-name "echo anaconda-2.3.0"
stub pyenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\""
PYENV_VERSION="anaconda-2.3.0" run pyenv-virtualenv-prefix
unstub pyenv-version-name
unstub pyenv-prefix
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/anaconda-2.3.0
OUT
}
@test "display conda env" {
create_conda "anaconda-2.3.0" "foo"
stub pyenv-version-name "echo anaconda-2.3.0/envs/foo"
stub pyenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\""
PYENV_VERSION="anaconda-2.3.0/envs/foo" run pyenv-virtualenv-prefix
unstub pyenv-version-name
unstub pyenv-prefix
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/anaconda-2.3.0
OUT
}

View File

@@ -106,6 +106,7 @@ EOS
@test "deactivate virtualenv which has been activated manually" { @test "deactivate virtualenv which has been activated manually" {
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE=
export PYENV_ACTIVATE_SHELL= export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="bash" run pyenv-sh-deactivate PYENV_SHELL="bash" run pyenv-sh-deactivate
@@ -203,6 +204,7 @@ EOS
@test "deactivate virtualenv which has been activated manually (fish)" { @test "deactivate virtualenv which has been activated manually (fish)" {
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE=
export PYENV_ACTIVATE_SHELL= export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="fish" run pyenv-sh-deactivate PYENV_SHELL="fish" run pyenv-sh-deactivate

View File

@@ -3,12 +3,32 @@
load test_helper load test_helper
@test "detect parent shell" { @test "detect parent shell" {
root="$(cd $BATS_TEST_DIRNAME/.. && pwd)" unset PYENV_SHELL
SHELL=/bin/false run pyenv-virtualenv-init - SHELL=/bin/false run pyenv-virtualenv-init -
assert_success assert_success
assert_output_contains ' PROMPT_COMMAND="_pyenv_virtualenv_hook;$PROMPT_COMMAND";' assert_output_contains ' PROMPT_COMMAND="_pyenv_virtualenv_hook;$PROMPT_COMMAND";'
} }
@test "detect parent shell from script (sh)" {
unset PYENV_SHELL
printf '#!/bin/sh\necho "$(pyenv-virtualenv-init -)"' > "${TMP}/script.sh"
chmod +x ${TMP}/script.sh
run ${TMP}/script.sh
assert_success
assert_output_contains_not ' PROMPT_COMMAND="_pyenv_virtualenv_hook;$PROMPT_COMMAND";'
rm -f "${TMP}/script.sh"
}
@test "detect parent shell from script (bash)" {
unset PYENV_SHELL
printf '#!/bin/bash\necho "$(pyenv-virtualenv-init -)"' > "${TMP}/script.sh"
chmod +x ${TMP}/script.sh
run ${TMP}/script.sh
assert_success
assert_output_contains ' PROMPT_COMMAND="_pyenv_virtualenv_hook;$PROMPT_COMMAND";'
rm -f "${TMP}/script.sh"
}
@test "sh-compatible instructions" { @test "sh-compatible instructions" {
run pyenv-virtualenv-init bash run pyenv-virtualenv-init bash
assert [ "$status" -eq 1 ] assert [ "$status" -eq 1 ]
@@ -33,21 +53,21 @@ export PYENV_VIRTUALENV_INIT=1;
_pyenv_virtualenv_hook() { _pyenv_virtualenv_hook() {
if [ -n "\$PYENV_ACTIVATE" ]; then if [ -n "\$PYENV_ACTIVATE" ]; then
if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then
pyenv deactivate --no-error --verbose eval "\$(pyenv sh-deactivate --no-error --verbose)"
unset PYENV_DEACTIVATE unset PYENV_DEACTIVATE
return 0 return 0
fi fi
if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
if pyenv deactivate --no-error --verbose; then if eval "\$(pyenv sh-deactivate --no-error --verbose)"; then
unset PYENV_DEACTIVATE unset PYENV_DEACTIVATE
pyenv activate --no-error --verbose || unset PYENV_DEACTIVATE eval "\$(pyenv sh-activate --no-error --verbose)" || unset PYENV_DEACTIVATE
else else
pyenv activate --no-error --verbose eval "\$(pyenv sh-activate --no-error --verbose)"
fi fi
fi fi
else else
if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
pyenv activate --no-error --verbose eval "\$(pyenv sh-activate --no-error --verbose)" || true
fi fi
fi fi
}; };
@@ -63,13 +83,14 @@ 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;
set -l PYENV_PREFIX (pyenv prefix 2>/dev/null; or true)
if [ -n "\$PYENV_ACTIVATE" ] if [ -n "\$PYENV_ACTIVATE" ]
if [ (pyenv version-name 2>/dev/null; or true) = "system" ] if [ "(pyenv version-name 2>/dev/null; or true)" = "system" ]
pyenv deactivate --no-error --verbose pyenv deactivate --no-error --verbose
set -e PYENV_DEACTIVATE set -e PYENV_DEACTIVATE
return 0 return 0
end end
if [ "\$PYENV_ACTIVATE" != (pyenv prefix 2>/dev/null; or true) ] if [ "\$PYENV_ACTIVATE" != "\$PYENV_PREFIX" ]
if pyenv deactivate --no-error --verbose if pyenv deactivate --no-error --verbose
set -e PYENV_DEACTIVATE set -e PYENV_DEACTIVATE
pyenv activate --no-error --verbose; or set -e PYENV_DEACTIVATE pyenv activate --no-error --verbose; or set -e PYENV_DEACTIVATE
@@ -78,8 +99,8 @@ function _pyenv_virtualenv_hook --on-event fish_prompt;
end end
end end
else else
if [ -z "\$VIRTUAL_ENV" ]; and [ "\$PYENV_DEACTIVATE" != (pyenv prefix 2>/dev/null; or true) ] if [ -z "\$VIRTUAL_ENV" ]; and [ "\$PYENV_DEACTIVATE" != "\$PYENV_PREFIX" ]
pyenv activate --no-error --verbose pyenv activate --no-error --verbose; or true
end end
end end
end end
@@ -94,25 +115,25 @@ export PYENV_VIRTUALENV_INIT=1;
_pyenv_virtualenv_hook() { _pyenv_virtualenv_hook() {
if [ -n "\$PYENV_ACTIVATE" ]; then if [ -n "\$PYENV_ACTIVATE" ]; then
if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then
pyenv deactivate --no-error --verbose eval "\$(pyenv sh-deactivate --no-error --verbose)"
unset PYENV_DEACTIVATE unset PYENV_DEACTIVATE
return 0 return 0
fi fi
if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
if pyenv deactivate --no-error --verbose; then if eval "\$(pyenv sh-deactivate --no-error --verbose)"; then
unset PYENV_DEACTIVATE unset PYENV_DEACTIVATE
pyenv activate --no-error --verbose || unset PYENV_DEACTIVATE eval "\$(pyenv sh-activate --no-error --verbose)" || unset PYENV_DEACTIVATE
else else
pyenv activate --no-error --verbose eval "\$(pyenv sh-activate --no-error --verbose)"
fi fi
fi fi
else else
if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
pyenv activate --no-error --verbose eval "\$(pyenv sh-activate --no-error --verbose)" || true
fi fi
fi fi
}; };
typeset -a precmd_functions typeset -g -a precmd_functions
if [[ -z \$precmd_functions[(r)_pyenv_virtualenv_hook] ]]; then if [[ -z \$precmd_functions[(r)_pyenv_virtualenv_hook] ]]; then
precmd_functions+=_pyenv_virtualenv_hook; precmd_functions+=_pyenv_virtualenv_hook;
fi fi

View File

@@ -52,10 +52,8 @@ OUT
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 : 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 */get-pip.py : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/venv/bin/pip" stub pyenv-exec "python */get-pip.py : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/venv/bin/pip"
stub curl true stub curl true
stub curl true
remove_executable "3.3.5" "virtualenv" remove_executable "3.3.5" "virtualenv"
create_executable "3.3.5" "pyvenv" create_executable "3.3.5" "pyvenv"
@@ -65,8 +63,6 @@ OUT
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.3.5 pyvenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.3.5 pyvenv ${PYENV_ROOT}/versions/venv
Installing setuptools from https://bootstrap.pypa.io/ez_setup.py...
PYENV_VERSION=venv python ${TMP}/pyenv/cache/ez_setup.py
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
PYENV_VERSION=venv python ${TMP}/pyenv/cache/get-pip.py PYENV_VERSION=venv python ${TMP}/pyenv/cache/get-pip.py
rehashed rehashed

View File

@@ -74,10 +74,8 @@ 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 ${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 : false" stub pyenv-exec "python -m ensurepip : false"
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 curl true stub curl true
stub curl true
remove_executable "3.2.1" "virtualenv" remove_executable "3.2.1" "virtualenv"
remove_executable "3.2.1" "pyvenv" remove_executable "3.2.1" "pyvenv"
@@ -88,7 +86,6 @@ OUT
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.2.1 pip install virtualenv PYENV_VERSION=3.2.1 pip install virtualenv
PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv
Installing setuptools from https://bootstrap.pypa.io/ez_setup.py...
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT
@@ -156,10 +153,8 @@ OUT
stub pyenv-exec "pip install virtualenv : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "pip install virtualenv : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "virtualenv ${PYENV_ROOT}/versions/venv : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv ${PYENV_ROOT}/versions/venv : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
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 */get-pip.py : true" stub pyenv-exec "python */get-pip.py : true"
stub curl true stub curl true
stub curl true
remove_executable "3.2.1" "virtualenv" remove_executable "3.2.1" "virtualenv"
remove_executable "3.2.1" "pyvenv" remove_executable "3.2.1" "pyvenv"
@@ -170,7 +165,6 @@ OUT
assert_output <<OUT assert_output <<OUT
PIP_REQUIRE_VENV= PYENV_VERSION=3.2.1 pip install virtualenv PIP_REQUIRE_VENV= PYENV_VERSION=3.2.1 pip install virtualenv
PIP_REQUIRE_VENV= PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv PIP_REQUIRE_VENV= PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv
Installing setuptools from https://bootstrap.pypa.io/ez_setup.py...
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT

View File

@@ -97,6 +97,16 @@ assert_output_contains() {
} }
} }
assert_output_contains_not() {
local expected="$1"
echo "$output" | grep -F "$expected" >/dev/null && {
{ echo "expected output to not contain $expected"
echo "actual: $output"
} | flunk; return
}
return 0
}
create_executable() { create_executable() {
mkdir -p "${PYENV_ROOT}/versions/$1/bin" mkdir -p "${PYENV_ROOT}/versions/$1/bin"
touch "${PYENV_ROOT}/versions/$1/bin/$2" touch "${PYENV_ROOT}/versions/$1/bin/$2"
@@ -106,3 +116,19 @@ create_executable() {
remove_executable() { remove_executable() {
rm -f "${PYENV_ROOT}/versions/$1/bin/$2" rm -f "${PYENV_ROOT}/versions/$1/bin/$2"
} }
create_conda() {
local version="$1"
shift 1
mkdir -p "${PYENV_ROOT}/versions/$version/bin"
touch "${PYENV_ROOT}/versions/$version/bin/activate"
touch "${PYENV_ROOT}/versions/$version/bin/conda"
chmod +x "${PYENV_ROOT}/versions/$version/bin/conda"
local conda_env
for conda_env; do
mkdir -p "${PYENV_ROOT}/versions/$version/envs/$conda_env/bin"
touch "${PYENV_ROOT}/versions/$version/envs/$conda_env/bin/activate"
touch "${PYENV_ROOT}/versions/$version/envs/$conda_env/bin/conda"
chmod +x "${PYENV_ROOT}/versions/$version/envs/$conda_env/bin/conda"
done
}

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="20141106" export PYENV_VIRTUALENV_VERSION="20150719"
} }
@test "display virtualenv version" { @test "display virtualenv version" {

View File

@@ -28,17 +28,14 @@ unstub_pyenv() {
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${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 : false" stub pyenv-exec "python -m ensurepip : false"
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 curl true stub curl true
stub curl true
run pyenv-virtualenv "3.2.1" "venv" run pyenv-virtualenv "3.2.1" "venv"
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv
Installing setuptools from https://bootstrap.pypa.io/ez_setup.py...
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT
@@ -54,17 +51,14 @@ OUT
stub pyenv-version-name "echo \${PYENV_VERSION}" stub pyenv-version-name "echo \${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 : false" stub pyenv-exec "python -m ensurepip : false"
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 curl true stub curl true
stub curl true
run pyenv-virtualenv venv run pyenv-virtualenv venv
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv
Installing setuptools from https://bootstrap.pypa.io/ez_setup.py...
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT
@@ -81,17 +75,14 @@ OUT
stub pyenv-version-name "echo \${PYENV_VERSION}" stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-exec "virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
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 */get-pip.py : true" stub pyenv-exec "python */get-pip.py : true"
stub curl true stub curl true
stub curl true
run pyenv-virtualenv -v -p python venv run pyenv-virtualenv -v -p python venv
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.2.1 virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.2.1 virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv
Installing setuptools from https://bootstrap.pypa.io/ez_setup.py...
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT
@@ -108,17 +99,14 @@ OUT
stub pyenv-version-name "echo \${PYENV_VERSION}" stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-exec "virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
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 */get-pip.py : true" stub pyenv-exec "python */get-pip.py : true"
stub curl true stub curl true
stub curl true
run pyenv-virtualenv --verbose --python=python venv run pyenv-virtualenv --verbose --python=python venv
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.2.1 virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.2.1 virtualenv --verbose --python=python ${PYENV_ROOT}/versions/venv
Installing setuptools from https://bootstrap.pypa.io/ez_setup.py...
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT

View File

@@ -17,12 +17,15 @@ setup() {
stub pyenv-virtualenv-prefix "3.3.3 : false" stub pyenv-virtualenv-prefix "3.3.3 : false"
stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/2.7.6\"" stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/2.7.6\""
stub pyenv-virtualenv-prefix "venv33 : echo \"${PYENV_ROOT}/versions/3.3.3\"" stub pyenv-virtualenv-prefix "venv33 : echo \"${PYENV_ROOT}/versions/3.3.3\""
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/2.7.6\""
stub pyenv-prefix "venv33 : echo \"${PYENV_ROOT}/versions/3.3.3\""
run pyenv-virtualenvs run pyenv-virtualenvs
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-versions unstub pyenv-versions
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success assert_success
assert_output <<OUT assert_output <<OUT
@@ -36,12 +39,15 @@ OUT
stub pyenv-versions "--bare : echo \"system\";echo \"venv27\";echo \"venv33\"" stub pyenv-versions "--bare : echo \"system\";echo \"venv27\";echo \"venv33\""
stub pyenv-virtualenv-prefix "venv27 : echo \"/usr\"" stub pyenv-virtualenv-prefix "venv27 : echo \"/usr\""
stub pyenv-virtualenv-prefix "venv33 : echo \"/usr\"" stub pyenv-virtualenv-prefix "venv33 : echo \"/usr\""
stub pyenv-prefix "venv27 : echo \"/usr\""
stub pyenv-prefix "venv33 : echo \"/usr\""
run pyenv-virtualenvs run pyenv-virtualenvs
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-versions unstub pyenv-versions
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success assert_success
assert_output <<OUT assert_output <<OUT
@@ -54,11 +60,14 @@ OUT
stub pyenv-versions "--bare : echo \"system\";echo \"venv27\";echo \"venv33\"" stub pyenv-versions "--bare : echo \"system\";echo \"venv27\";echo \"venv33\""
stub pyenv-virtualenv-prefix "venv27 : echo \"/usr\"" stub pyenv-virtualenv-prefix "venv27 : echo \"/usr\""
stub pyenv-virtualenv-prefix "venv33 : echo \"/usr\"" stub pyenv-virtualenv-prefix "venv33 : echo \"/usr\""
stub pyenv-prefix "venv27 : echo \"/usr\""
stub pyenv-prefix "venv33 : echo \"/usr\""
run pyenv-virtualenvs --bare run pyenv-virtualenvs --bare
unstub pyenv-versions unstub pyenv-versions
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success assert_success
assert_output <<OUT assert_output <<OUT