135 Commits

Author SHA1 Message Date
Yamashita, Yuu
a3bc42cb93 v1.0.0 (yyuu/pyenv#520) 2016-08-15 08:45:05 +00:00
Yamashita, Yuu
0fd8a161e6 v20160716 2016-07-16 07:00:03 +00:00
Yamashita, Yuu
704f08f866 Merge pull request #185 from yyuu/python-m-venv
Use `-m venv` instead of `pyvenv` executable (fixes #184)
2016-07-16 15:53:01 +09:00
Yamashita, Yuu
8c7dd01954 Replaced pyvenv by -m venv 2016-07-16 06:50:50 +00:00
Yamashita, Yuu
99a90ab774 Fix still broken tests 2016-07-16 06:43:47 +00:00
Yamashita, Yuu
187156d600 Use python -m venv instead on pyvenv in tests 2016-07-16 06:31:30 +00:00
Yamashita, Yuu
7dc9f78589 sed -e s/pyvenv/venv/g README.md [ci skip] 2016-07-16 05:49:41 +00:00
Yamashita, Yuu
24b494a858 Use -m venv instead of pyvenv executable (fixes #184) 2016-07-16 05:46:43 +00:00
Yamashita, Yuu
1488c3ed65 Merge pull request #176 from yyuu/fish-dot-to-source
Use `source` in favor of `.` (fixes #175)
2016-05-30 09:17:17 +09:00
Yamashita, Yuu
5c2d7dc291 Use source in favor of . (fixes #175)
* https://github.com/yyuu/pyenv/pull/615
* https://github.com/fish-shell/fish-shell/issues/310
2016-05-30 00:13:49 +00:00
Yamashita, Yuu
f58bdb5cd5 Merge pull request #174 from yyuu/conda-activate-d
Source conda package activate/deactivat scripts if exist
2016-05-25 10:02:12 +09:00
Yamashita, Yuu
d9391b4fb9 Add tests for conda's package activate/deactivate script 2016-05-25 00:53:44 +00:00
Yamashita, Yuu
d6bc583753 Source conda package activate/deactivat scripts if exist (fixes #173) 2016-05-24 00:39:40 +00:00
Yamashita, Yuu
98bb240843 Merge pull request #171 from yyuu/simplified-messaging-levels
Simplified messaging levels
2016-05-07 22:50:33 +09:00
Yamashita, Yuu
1cb6bb06ef Turn PYENV_VIRTUALENV_VERBOSE_ACTIVATE on if --verbose is given 2016-05-07 13:45:00 +00:00
Yamashita, Yuu
08cfea259c Remove backward compat --no-error option 2016-05-07 13:40:48 +00:00
Yamashita, Yuu
c64aebef08 1) Made --quiet as opposite of --verbose 2) Suppress warning about prompts on --quiet 2016-05-07 13:40:32 +00:00
Yamashita, Yuu
b952f573ba Merge pull request #169 from puhitaku/verbose_env
Suppress activate/deactivate messages by default
2016-04-19 09:58:26 +09:00
puhitaku
62e32f9cb3 Fix test: add unsets 2016-04-15 11:56:28 +09:00
puhitaku
8ab4463d80 Fix test: unnecessary env 2016-04-13 11:44:21 +09:00
puhitaku
34dc769a5d Fix test: conda env 2016-04-13 11:40:47 +09:00
puhitaku
16597f0bb8 Fix test: deactivate 2016-04-13 11:40:17 +09:00
puhitaku
fa0876685e Fix test: wrongly removed lines 2016-04-13 11:27:00 +09:00
puhitaku
ab5b5b9221 Fix tests 2016-04-08 17:27:11 +09:00
puhitaku
f627609419 Suppress activate/deactivate messages by default 2016-04-08 15:45:26 +09:00
Yamashita, Yuu
23f7027ce4 Merge pull request #165 from shangsunset/master
change minor typo in bin/pyenv-sh-activate
2016-03-28 09:23:26 +09:00
shangsunset
55f7e3e1e1 fix minor typos in test 2016-03-26 23:25:14 -04:00
shangsunset
d26852e274 fix minor typos in test 2016-03-25 19:24:58 -04:00
shangsunset
7938c89aff change minor typo in bin/pyenv-sh-activate 2016-03-25 17:02:33 -04:00
Yamashita, Yuu
1ce2e2d730 v20160315 2016-03-15 00:37:46 +00:00
Yamashita, Yuu
d3d6504e01 Set proper CONDA_DEFAULT_ENV for shorter name (#160) 2016-03-14 12:50:27 +00:00
Yamashita, Yuu
15981986e5 Merge pull request #154 from seanfisk/eval-path-later
Evaluate ${PATH} when outputted code is eval'd.
2016-03-07 11:40:54 +09:00
Yamashita, Yuu
ddda0d7200 Merge pull request #158 from marco-buttu/master
`pyenv virtualenvs` lists two entries for each virtualenv
2016-03-05 21:55:47 +09:00
Marco Buttu
4f39ac4623 "pyenv virtualenvs" lists two entries for each virtualenv 2016-03-05 08:50:10 +01:00
Sean Fisk
dbbbc33206 Evaluate ${PATH} when outputted code is eval'd.
It was previously evaluated when 'pyenv virtualenv-init' is run.
2016-03-01 01:12:06 -05:00
Yamashita, Yuu
17ee6e72b6 v20160202 2016-02-02 08:47:11 +00:00
Yamashita, Yuu
1f761275cd Install virtualenv 13.1.2 for CPython 3.2 (yyuu/pyenv#531) 2016-01-30 04:34:23 +00:00
Yamashita, Yuu
51ebc8ff8a v20160112 2016-01-12 01:53:27 +00:00
Yamashita, Yuu
4c8eeebbff Add missing declaration of virtualenv_prefix to fix looking up executables from source version (#62) 2016-01-12 00:33:34 +00:00
Yamashita, Yuu
433992e376 Merge pull request #138 from kerstin/autoactivate
Clarification of auto-activation/deactivation feature
2016-01-03 07:44:19 +09:00
Kerstin Kollmann
efe6d6757c clarify how auto-activation works (requirements) 2016-01-02 16:31:37 +01:00
Yamashita, Yuu
5963688fc4 v20151229 2015-12-29 09:13:51 +00:00
Yamashita, Yuu
13b7dc172a need to use functions -q to check existence of the function in fish (#136) 2015-12-29 09:03:31 +00:00
Yamashita, Yuu
0b42fbc27d v20151222 2015-12-22 10:38:02 +00:00
Yamashita, Yuu
bc5d308d05 Remove version string from test 2015-12-22 10:37:22 +00:00
Yamashita, Yuu
9414a6bb30 Stop showing version not installed in precmd (#49) 2015-12-18 02:32:01 +00:00
Yamashita, Yuu
b9951fa69c Uninstall all virtualenvs inside envs on the uninstallation of the parent version 2015-12-18 00:30:29 +00:00
Yamashita, Yuu
2d73d058bd Fix wrong library path for virtualenv on PyPy/Jython (fixes #134) 2015-12-15 00:24:02 +00:00
Yamashita, Yuu
907c6b4265 Merge branch 'detect-virtualenv-prefix-without-executing-python' 2015-12-10 03:54:06 +00:00
Yamashita, Yuu
1e88df88a9 Rewrite virtualenv-prefix without executing python (#132) 2015-12-10 03:53:16 +00:00
Yamashita, Yuu
c61fdaa478 Fix installation script to install hook scripts as well (#62) 2015-12-09 23:57:51 +00:00
Yamashita, Yuu
fbb7d2876e Merge pull request #131 from leeclemens/patch-1
Add envs/*/my-virtual-env dir for uninstall
2015-12-07 07:02:30 +09:00
Lee Clemens
a64f194163 Add envs/*/my-virtual-env dir for uninstall
Both directories need to be deleted or a subsequent install with the same name will fail

pyenv install 3.4.3 my-virtual-env:
rm -rf ~/.pyenv/versions/my-virtual-env ~/.pyenv/versions/3.4.3/my-virtual-env
2015-12-06 12:11:08 -05:00
Yamashita, Yuu
17d22e7a13 Add PYENV_VIRTUAL_ENV to check if the virtualenv has been activated via pyenv-virtualenv or not (#128) 2015-12-05 01:44:10 +00:00
Yamashita, Yuu
8d307def52 Merge branch 'envs-riwyo-anyenv-workaround' (fixes #130) 2015-12-04 02:50:27 +00:00
Yamashita, Yuu
a5d406a545 Add tests for extra envs in PYENV_ROOT 2015-12-04 02:41:43 +00:00
Yamashita, Yuu
9c49fcd734 Fix broken tests 2015-12-04 02:33:37 +00:00
Yamashita, Yuu
3fc832f4c7 Create virtualenv inside real_prefix 2015-12-04 00:43:10 +00:00
Yamashita, Yuu
aae3bf2786 Add workaround for rywyo/anyenv 2015-12-04 00:43:03 +00:00
Yamashita, Yuu
035f5185b5 Skip ensurepip if --no-setuptools, --no-pip or --without-pip is given (fixes #127) 2015-12-04 00:07:01 +00:00
Yamashita, Yuu
b9d17df337 pyenv-which-ext isn't necessary for Anaconda since latest pyenv has built-in hook 2015-12-03 09:55:25 +00:00
Yamashita, Yuu
e230817496 Restored --no-error for compatibility with v20151103 and earlier 2015-12-02 23:59:41 +00:00
Yamashita, Yuu
6e91d75069 Stop showing message about pyenv virtualenv-init on activate (#122)
`pyenv virtualenv-init` is just an option. Always showing message about
it would be too much to do.
2015-12-02 23:49:07 +00:00
Yamashita, Yuu
cf7dea411d Merge pull request #125 from yyuu/conda-create
Use `conda create` to create virtual environment if `conda` is available
2015-11-27 22:38:42 +09:00
Yamashita, Yuu
fa11d65bf6 Add tests for conda create 2015-11-27 13:36:33 +00:00
Yamashita, Yuu
48b491f343 Add test helpers for virtualenv, pyvenv and conda 2015-11-27 13:31:00 +00:00
Yamashita, Yuu
6a2b77ed5b Fix tests 2015-11-27 12:36:59 +00:00
Yamashita, Yuu
a67be6dbe7 Update README about conda create 2015-11-27 04:55:04 +00:00
Yamashita, Yuu
789c349570 Allow specifying python version for conda via -p or --python 2015-11-27 04:41:00 +00:00
Yamashita, Yuu
bad8dcf768 Use conda create to create virtualenv if the source version is a Anaconda/Miniconda 2015-11-27 04:32:34 +00:00
Yamashita, Yuu
116e133c90 Activate a virtualenv of current version if specified version is not a virtualenv
```sh
% pyenv versions
  system
* miniconda3-3.16.0 (set by PYENV_VERSION environment variable)
  miniconda3-3.16.0/envs/venv
% pyenv activate venv
pyenv-virtualenv: deactivate miniconda3-3.16.0
pyenv-virtualenv: activate miniconda3-3.16.0/envs/venv
```
2015-11-27 00:04:05 +00:00
Yamashita, Yuu
35732c8393 Merge branch 'virtualenv-without-python-executable' 2015-11-26 12:40:57 +00:00
Yamashita, Yuu
c3d044d70a Only use premitives in which hooks to avoid infinite loop (#104) 2015-11-26 12:39:15 +00:00
Yamashita, Yuu
bdda7214a8 Should not try to find system-site-packages if virtualenv is a conda's environment (#104) 2015-11-26 11:07:26 +00:00
Yamashita, Yuu
1edff311d5 exits as error if the virtual environment doesn't have python executable (#104)
conda's environment might not have `python` executable. If the prefix
doesn't contain `python` in it, `pyenv-which` might be ran into infinite
loop if some of `which` hooks invoke `pyenv-virtualenv-prefix`.
2015-11-26 10:34:32 +00:00
Yamashita, Yuu
353062df09 Merge pull request #124 from yyuu/deactivation-before-activation-should-not-return-non-zero
Deactivation before activation should not return as non-zero
2015-11-26 19:32:25 +09:00
Yamashita, Yuu
aae07d1318 Deactivation before activation should not return as non-zero (fixes #116) 2015-11-26 09:15:02 +00:00
Yamashita, Yuu
aea9eda680 Merge pull request #123 from yyuu/remove-pyenv-deactivate
Remove `PYENV_DEACTIVATE`
2015-11-26 14:06:14 +09:00
Yamashita, Yuu
5e92253943 Fix broken --skip-aliases 2015-11-25 12:04:48 +00:00
Yamashita, Yuu
0bbb12a3bf Use glob to check if the virtualenv is inside pyenv's prefix or not 2015-11-24 00:04:18 +00:00
Yamashita, Yuu
4e9d697887 Suppress message about virtualenv-init if -quiet given (fixes #122) 2015-11-23 13:34:46 +00:00
Yamashita, Yuu
5f87786adf Remove PYENV_DEACTIVATE (fixes #121)
This means that pyenv-virtualenv will not allow manual deactivation of
virtualenv if pyenv-virtualenv-init is enabled. This must be acceptable
since the activation of virtualenv is just setting of environment
variables in current implementation.
2015-11-23 13:33:31 +00:00
Yamashita, Yuu
f92a3a26c5 Add --skip-aliases to pyenv virtualenvs (fixes #120) 2015-11-23 12:06:22 +00:00
Yamashita, Yuu
5fd9cf826d Merge branch 'slashes' 2015-11-23 09:38:55 +00:00
Yamashita, Yuu
59bc189bec Basically / should not be allowed as a part of name of virtualenv 2015-11-23 09:38:39 +00:00
Yamashita, Yuu
ede56c1c2e Merge pull request #119 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
2015-11-22 11:18:16 +09:00
The Gitter Badger
34ee1a47d7 Add Gitter badge 2015-11-22 02:17:12 +00:00
Yamashita, Yuu
caa5832b8a Allow manual activation of virtualenvs inside $(pyenv-root)/versions (#115) 2015-11-16 02:29:46 +00:00
Yamashita, Yuu
de1deb1e81 Merge branch 'non-pyenv-virtualenv' 2015-11-12 13:47:37 +00:00
Yamashita, Yuu
83bc6a49e4 Restore variables set by activate script of virtualenv properly (#150)
The `activate` script does't export the variables of `_OLD_VIRTUAL_*`,
most the deactivation code needed to be moved to `sh-deactivate`.
2015-11-12 13:45:33 +00:00
Yamashita, Yuu
47feedc934 exits as 0 if there is some virtualenv outside from pyenv is already activated (#114) 2015-11-12 13:29:25 +00:00
Yamashita, Yuu
a73817eecc Use canonical name for VIRTUAL_ENV as a workaround for IPython (fixes #113) 2015-11-12 00:29:26 +00:00
Yamashita, Yuu
25bf4a6155 Unset environment variables to pass tests while activated 2015-11-12 00:27:02 +00:00
Yamashita, Yuu
0b9b19232a Skip creating $(pyenv root)/versions/system/envs/ directory for virtualenv from system 2015-11-11 01:34:59 +09:00
Yamashita, Yuu
bb623bd8bf Prevent removing symlinks bound to different version (#106) 2015-11-09 05:57:16 +00:00
Yamashita, Yuu
3152718bfd Merge branch 'restore-prompt' 2015-11-09 01:58:19 +00:00
Yamashita, Yuu
ee18ffac9f Change prompt after activate (#52) 2015-11-09 01:57:17 +00:00
Yamashita, Yuu
c1b9238cbe Reject creating a virtualenv named system (yyuu/pyenv#475) 2015-11-08 23:44:58 +00:00
Yamashita, Yuu
6ac8afbcff Merge pull request #111 from yyuu/activate-on-multiple-versions
Change `activate` behavior on multiple versions
2015-11-08 18:42:09 +09:00
Yamashita, Yuu
950a742be3 Add short options 2015-11-08 09:18:29 +00:00
Yamashita, Yuu
bdd52a79cd Revert PYENV_DEACTIVATE for backward compatibility 2015-11-08 08:34:43 +00:00
Yamashita, Yuu
d2edf5dddb Fix tests 2015-11-08 06:32:34 +00:00
Yamashita, Yuu
f7d1aa7d94 Allow activating first version of virtualenv even if there are multiple versions in pyenv (#105) 2015-11-08 06:32:28 +00:00
Yamashita, Yuu
ce6ec4f173 Merge pull request #110 from yyuu/init-refactor
Refactor init code
2015-11-07 03:39:19 +09:00
Yamashita, Yuu
0fa5de07c9 fix broken tests 2015-11-06 18:26:23 +00:00
Yamashita, Yuu
017d20ad91 remove unnecessary logic from init script 2015-11-06 17:58:09 +00:00
Yamashita, Yuu
7f33ddd911 prompt should be managed by users, not by tools 2015-11-06 17:34:21 +00:00
Yamashita, Yuu
8731e9bf14 replaced --no-error by --quiet 2015-11-06 17:33:40 +00:00
Yamashita, Yuu
bf7e9ba59a Show activating... messages by default 2015-11-06 17:27:50 +00:00
Yamashita, Yuu
dae2788f56 Update LICENSE 2015-11-06 19:42:39 +09:00
Yamashita, Yuu
2a8d0f40b4 Update README.md 2015-11-06 19:41:48 +09:00
Yamashita, Yuu
6523d00f9c Merge pull request #108 from yyuu/hook-source-activate
dd a script to hook `source activate` for Anaconda/Miniconda
2015-11-06 17:15:12 +09:00
Yamashita, Yuu
c54d480135 fix broken installer script 2015-11-06 06:52:40 +00:00
Yamashita, Yuu
e79ca1d53f add shim for deactivate 2015-11-06 06:31:19 +00:00
Yamashita, Yuu
ad2ada84ab fix broken tests 2015-11-06 06:28:22 +00:00
Yamashita, Yuu
270c379a32 rename tests 2015-11-06 06:15:53 +00:00
Yamashita, Yuu
dfd1655069 add a script to hook source activate for Anaconda/Miniconda (#103) 2015-11-06 06:10:09 +00:00
Yamashita, Yuu
e489163f92 Merge pull request #106 from yyuu/uninstall-rehash-envs
Support uninstall and rehash of virtual environments created in `envs`
2015-11-05 18:40:46 +09:00
Yamashita, Yuu
5c9909f4c1 Merge pull request #107 from yyuu/create-virtualenv-in-envs
Create virtualenv inside `envs` directory as similar as Anaconda
2015-11-05 18:40:25 +09:00
Yamashita, Yuu
459d1aa92d Merge pull request #104 from yyuu/activate-ng
Rewrite `activate` without using virtualenv/venv/conda's script
2015-11-05 18:39:30 +09:00
Yamashita, Yuu
07b31aa2f6 Add tests for virtualenv-delete 2015-11-05 05:42:10 +00:00
Yamashita, Yuu
a233491f2b Remove obsolete TODO comment 2015-11-05 01:58:44 +00:00
Yamashita, Yuu
c6a705b1d9 Setup CONDA_DEFAULT_ENV only if conda executable exists 2015-11-05 01:49:04 +00:00
Yamashita, Yuu
8038659299 Create virtualenv inside envs directory as similar as Anaconda 2015-11-04 14:56:01 +00:00
Yamashita, Yuu
7e821de319 Support creating shims of virtual environments in envs (#103) 2015-11-04 14:09:11 +00:00
Yamashita, Yuu
0df362e8c8 Support deletion of virtualenv created in envs 2015-11-04 14:08:58 +00:00
Yamashita, Yuu
64ceee5c8e Stop using virtualenv's activate script (#69) 2015-11-04 13:50:17 +00:00
Yamashita, Yuu
2ae921c253 Treat all versions with activate script as a virtual environment 2015-11-04 13:07:46 +00:00
Yamashita, Yuu
7931f6c766 Specify branch for build status 2015-11-04 12:15:02 +00:00
Yamashita, Yuu
72cf0e1b1b v20151103 2015-11-03 13:36:45 +00:00
Yamashita, Yuu
41ee00574c Merge pull request #101 from blueyed/prepend-to-precmd
init: zsh: prepend hook to precmd_functions
2015-11-03 05:25:20 +09:00
Daniel Hahler
f594876f31 init: zsh: prepend hook to precmd_functions
This makes sure that $VIRTUAL_ENV is handled already in other precmd
functions, especially your prompt.
2015-11-02 17:52:59 +01:00
Yamashita, Yuu
521576e8c4 workaround for pyvenv --system-site-packages (#62) 2015-10-30 01:55:46 +00:00
Yamashita, Yuu
0048516a7d Merge pull request #100 from bartoszj/master
Passing return value from executed command.
2015-10-16 07:07:33 +09:00
Bartosz Janda
f657fad926 Passing return value from executed command. 2015-10-15 20:37:00 +02:00
36 changed files with 2385 additions and 1032 deletions

View File

@@ -1,5 +1,49 @@
## Version History ## Version History
#### 1.0.0
* Use similar versioning scheme as pyenv; YYYYMMDD -> X.Y.Z
#### 20160716
* Suppress activate/deactivate messages by default (#169, #170, #171)
* Source conda package activate/deactivat scripts if exist (#173)
* Use `source` in favor of `.` for `fish` (#175)
* Use `python -m venv` instead of `pyvenv` due to deprecation of `pyvenv` after 3.6 (#184, #185)
#### 20160315
* Evaluate `${PATH}` when outputted code is eval'd. (#154)
* Set proper `CONDA_DEFAULT_ENV` for shorter name (#160)
#### 20160202
* Install virtualenv 13.1.2 for CPython/Stackless 3.2.x (yyuu/pyenv#531)
#### 20160112
* Fix problem with `virtualenv` to look up executables from source version with `--system-site-packages` (#62)
#### 20151229
* Fix `deactivate` error on `fish` (#136)
#### 20151222
* Improved interoperability with Anaconda/Miniconda (#103, #106, #107, #108)
* Create `virtualenv` inside `envs` directory of source version, like Anaconda/Miniconda (#103, #107)
* Rewrite `pyenv activate` and `pyenv deactivate` without using scripts provided by virtualenv and conda (#51, #69, #103, #104, #121)
* Improve the `pyenv activate` behaviour on multipe versions (#105, #111)
* Reject creating a virtualenv named `system` (yyuu/pyenv#475)
* Add `--skip-aliases` to `pyenv virtualenvs` (#120)
* Stop showing `version not installed` warning messages in precmd (#49)
#### 20151103
* Passing return value from executed command. (#100)
* Add workaround for commands installed in a virtual environment created by `pyvenv` (#62)
* init: zsh: prepend hook to `precmd_functions` (#101)
#### 20151006 #### 20151006
* Ignore user's site-packages on ensurepip/get-pip (#89) * Ignore user's site-packages on ensurepip/get-pip (#89)

View File

@@ -1,4 +1,4 @@
Copyright (c) 2013 Yamashita, Yuu Copyright (c) 2015 Yamashita, Yuu
Permission is hereby granted, free of charge, to any person obtaining Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the a copy of this software and associated documentation files (the

View File

@@ -1,6 +1,8 @@
# pyenv-virtualenv # pyenv-virtualenv
[![Build Status](https://travis-ci.org/yyuu/pyenv-virtualenv.svg)](https://travis-ci.org/yyuu/pyenv-virtualenv) [![Join the chat at https://gitter.im/yyuu/pyenv-virtualenv](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/yyuu/pyenv-virtualenv?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Build Status](https://travis-ci.org/yyuu/pyenv-virtualenv.svg?branch=master)](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 features to manage virtualenvs and conda environments that provides features to manage virtualenvs and conda environments
@@ -28,13 +30,13 @@ From inside that directory you can:
1. **Check out pyenv-virtualenv into plugin directory** 1. **Check out pyenv-virtualenv into plugin directory**
``` ```sh
$ 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. (OPTIONAL) **Add `pyenv virtualenv-init` to your shell** to enable auto-activation of virtualenv. This is entirely optional but pretty useful. 2. (OPTIONAL) **Add `pyenv virtualenv-init` to your shell** to enable auto-activation of virtualenvs. This is entirely optional but pretty useful. See "Activate virtualenv" below.
``` ```sh
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
``` ```
@@ -43,7 +45,7 @@ From inside that directory you can:
3. **Restart your shell to enable pyenv-virtualenv** 3. **Restart your shell to enable pyenv-virtualenv**
``` ```sh
$ exec "$SHELL" $ exec "$SHELL"
``` ```
@@ -58,18 +60,18 @@ installed, you will also be able to use the `pyenv virtualenv` command.
*This is the recommended method of installation if you installed pyenv *This is the recommended method of installation if you installed pyenv
with Homebrew.* with Homebrew.*
``` ```sh
$ brew install pyenv-virtualenv $ brew install pyenv-virtualenv
``` ```
Or, if you would like to install the latest development release: Or, if you would like to install the latest development release:
``` ```sh
$ brew install --HEAD pyenv-virtualenv $ brew install --HEAD pyenv-virtualenv
``` ```
After installation, you'll still need to add After installation, you'll still need to add
``` ```sh
eval "$(pyenv init -)" eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)" eval "$(pyenv virtualenv-init -)"
``` ```
@@ -84,7 +86,7 @@ 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,
``` ```sh
$ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10 $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
``` ```
@@ -97,7 +99,7 @@ folder called `my-virtual-env-2.7.10`.
If there is only one argument given to `pyenv virtualenv`, the virtualenv will If there is only one argument given to `pyenv virtualenv`, the virtualenv will
be created with the given name based on the current pyenv Python version. be created with the given name based on the current pyenv Python version.
``` ```sh
$ pyenv version $ pyenv version
3.4.3 (set by /home/yyuu/.pyenv/version) 3.4.3 (set by /home/yyuu/.pyenv/version)
$ pyenv virtualenv venv34 $ pyenv virtualenv venv34
@@ -108,23 +110,26 @@ $ pyenv virtualenv venv34
`pyenv virtualenvs` shows you the list of existing virtualenvs and `conda` environments. `pyenv virtualenvs` shows you the list of existing virtualenvs and `conda` environments.
``` ```sh
$ pyenv shell venv27 $ pyenv shell venv34
$ pyenv virtualenvs $ pyenv virtualenvs
miniconda3-3.9.1 (created from /home/yyuu/.pyenv/versions/miniconda3-3.9.1) miniconda3-3.9.1 (created from /home/yyuu/.pyenv/versions/miniconda3-3.9.1)
miniconda3-3.9.1/envs/myenv (created from /home/yyuu/.pyenv/versions/miniconda3-3.9.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) 2.7.10/envs/my-virtual-env-2.7.10 (created from /home/yyuu/.pyenv/versions/2.7.10)
venv34 (created from /home/yyuu/.pyenv/versions/3.4.3) 3.4.3/envs/venv34 (created from /home/yyuu/.pyenv/versions/3.4.3)
my-virtual-env-2.7.10 (created from /home/yyuu/.pyenv/versions/2.7.10)
* venv34 (created from /home/yyuu/.pyenv/versions/3.4.3)
``` ```
There are two entries for each virtualenv, and the shorter one is just a symlink.
### 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 and `conda` environments. require you to `activate` the virtualenv and `conda` environments.
`pyenv-virtualenv` will automatically activate/deactivate the virtualenv if If `eval "$(pyenv virtualenv-init -)"` is configured in your shell, `pyenv-virtualenv` will automatically activate/deactivate virtualenvs on entering/leaving directories which contain a `.python-version` file that lists a valid virtual environment. `.python-version` files denote local Python versions and can be created and deleted with the [`pyenv local`](https://github.com/yyuu/pyenv/blob/master/COMMANDS.md#pyenv-local) command.
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:
@@ -136,56 +141,67 @@ pyenv deactivate
### Delete existing virtualenv ### Delete existing virtualenv
Removing the directory in `~/.pyenv/versions` will delete the virtualenv, or you can run: Removing the directories in `~/.pyenv/versions` and `~/.pyenv/versions/{version}/envs` will delete the virtualenv, or you can run:
```sh ```sh
pyenv uninstall my-virtual-env pyenv uninstall my-virtual-env
``` ```
### virtualenv and pyvenv ### virtualenv and venv
There is a [venv](http://docs.python.org/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 an executable module `venv` which is the successor of `virtualenv`
and distributed by default. and distributed by default.
`pyenv-virtualenv` uses `pyvenv` if it is available and the `virtualenv` `pyenv-virtualenv` uses `python -m venv` if it is available and the `virtualenv`
command is not available. command is not available.
### Anaconda and Miniconda ### Anaconda and Miniconda
Because Anaconda and Miniconda may install standard commands (e.g. `curl`, `openssl`, `sqlite3`, etc.) into their prefix, You can manage `conda` environments by `conda create` as same manner as standard Anaconda/Miniconda installations.
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`. To use those environments, you can use `pyenv activate` and `pyenv deactivate`.
``` ```sh
(root)$ pyenv version $ pyenv version
miniconda3-3.9.1 (set by /home/yyuu/.pyenv/version) miniconda3-3.9.1 (set by /home/yyuu/.pyenv/version)
(root)$ conda env list $ conda env list
# conda environments: # conda environments:
# #
myenv /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv myenv /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv
root * /home/yyuu/.pyenv/versions/miniconda3-3.9.1 root * /home/yyuu/.pyenv/versions/miniconda3-3.9.1
(root)$ pyenv activate myenv $ pyenv activate miniconda3-3.9.1/envs/myenv
discarding /home/yyuu/.pyenv/versions/miniconda3-3.9.1/bin from PATH 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 prepending /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv/bin to PATH
(myenv)$ python --version $ python --version
Python 3.4.3 :: Continuum Analytics, Inc. Python 3.4.3 :: Continuum Analytics, Inc.
(myenv)$ pyenv deactivate $ pyenv deactivate
discarding /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv/bin from PATH discarding /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv/bin from PATH
``` ```
If `conda` is available, `pyenv virtualenv` will use it to create environment by `conda create`.
```sh
$ pyenv version
miniconda3-3.9.1 (set by /home/yyuu/.pyenv/version)
$ pyenv virtualenv myenv2
$ conda env list
# conda environments:
#
myenv /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv
myenv /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv2
root * /home/yyuu/.pyenv/versions/miniconda3-3.9.1
```
You can use version like `miniconda3-3.9.1/envs/myenv` to specify `conda` environment as a version in pyenv. You can use version like `miniconda3-3.9.1/envs/myenv` to specify `conda` environment as a version in pyenv.
``` ```sh
(root)$ pyenv version $ pyenv version
miniconda3-3.9.1 (set by /home/yyuu/.pyenv/version) miniconda3-3.9.1 (set by /home/yyuu/.pyenv/version)
(root)$ pyenv shell miniconda3-3.9.1/envs/myenv $ pyenv shell miniconda3-3.9.1/envs/myenv
(myenv)$ which python $ which python
/home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv/bin/python /home/yyuu/.pyenv/versions/miniconda3-3.9.1/envs/myenv/bin/python
``` ```
@@ -199,11 +215,11 @@ 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.
* `GET_PIP`, if set and `pyvenv` is preferred over `virtualenv`, * `GET_PIP`, if set and `venv` is preferred over `virtualenv`,
use `get_pip.py` from the specified location. use `get_pip.py` from the specified location.
* `GET_PIP_URL`, if set and `pyvenv` is preferred over * `GET_PIP_URL`, if set and `venv` is preferred over
`virtualenv`, download `get_pip.py` from the specified URL. `virtualenv`, download `get_pip.py` from the specified URL.
* `PIP_VERSION`, if set and `pyvenv` is preferred * `PIP_VERSION`, if set and `venv` is preferred
over `virtualenv`, install the specified version of pip. over `virtualenv`, install the specified version of pip.
@@ -216,7 +232,7 @@ See [CHANGELOG.md](CHANGELOG.md).
(The MIT License) (The MIT License)
* Copyright (c) 2013 Yamashita, Yuu * Copyright (c) 2015 Yamashita, Yuu
Permission is hereby granted, free of charge, to any person obtaining Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the a copy of this software and associated documentation files (the

View File

@@ -14,8 +14,16 @@
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
unset NOERROR if [ -z "${PYENV_ROOT}" ]; then
unset VERBOSE PYENV_ROOT="$(pyenv-root)"
fi
resolve_link() {
$(type -p greadlink readlink | head -1) "$1"
}
unset FORCE
unset QUIET
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
@@ -24,15 +32,18 @@ while [ $# -gt 0 ]; do
echo --unset echo --unset
exec pyenv-virtualenvs --bare exec pyenv-virtualenvs --bare
;; ;;
"--no-error" ) "-f" | "--force" )
NOERROR=1 FORCE=1
;;
"-q" | "--quiet" )
QUIET=1
;; ;;
"--unset" ) "--unset" )
echo "pyenv deactivate" exec pyenv-sh-deactivate
exit
;; ;;
"--verbose" ) "-v" | "--verbose" )
VERBOSE=1 unset QUIET
PYENV_VIRTUALENV_VERBOSE_ACTIVATE=1
;; ;;
* ) * )
break break
@@ -46,7 +57,7 @@ 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 2>/dev/null))
IFS="$OLDIFS" IFS="$OLDIFS"
fi fi
@@ -56,97 +67,183 @@ if [ -z "${PYENV_VIRTUALENV_INIT}" ]; then
no_shell= no_shell=
fi fi
if [ "${#versions[@]}" -gt 1 ]; then venv="${versions}"
[ -n "$NOERROR" ] || echo "pyenv-virtualenv: cannot activate multiple versions at once: ${versions[@]}" 1>&2
echo "false" if [ -n "${VIRTUAL_ENV}" ]; then
exit 1 # exit as success if some virtualenv is already activated outside from pyenv-virtualenv
if [ -z "${PYENV_VIRTUAL_ENV}" ]; then
if [ -z "${FORCE}" ]; then
if [ -z "${QUIET}" ]; then
echo "pyenv-virtualenv: virtualenv \`${VIRTUAL_ENV}' is already activated" 1>&2
fi
echo "true"
exit 0
fi
fi
fi fi
if pyenv-prefix "${versions}" 1>/dev/null 2>&1; then if ! pyenv-virtualenv-prefix "${venv}" 1>/dev/null 2>&1; then
if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then # fallback to virtualenv of current version
[ -n "$NOERROR" ] || echo "pyenv-virtualenv: version \`${versions}' is not a virtualenv" 1>&2 OLDIFS="$IFS"
echo "false" IFS=: current_versions=($(pyenv-version-name))
exit 1 IFS="$OLDIFS"
fi new_venv="${current_versions%/envs/*}/envs/${venv}"
if pyenv-virtualenv-prefix "${new_venv}" 1>/dev/null 2>&1; then
venv="${new_venv}"
versions[0]="${new_venv}"
else else
version="$(pyenv-version-name)" if [ -z "${QUIET}" ]; then
if [[ "${versions}" == "root" ]]; then echo "pyenv-virtualenv: version \`${venv}' is not a virtualenv" 1>&2
versions="${version%/envs/*}"
else
versions="${version%/envs/*}/envs/${versions}"
fi 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" echo "false"
exit 1 exit 1
fi fi
fi fi
# exit as error if there are multiple virtualenvs
# https://github.com/yyuu/pyenv-virtualenv/issues/105
for version in "${versions[@]}"; do
if [[ "${version}" != "${venv}" ]]; then
if pyenv-virtualenv-prefix "${version}" 1>/dev/null 2>&1; then
if [ -z "${QUIET}" ]; then
echo "pyenv-virtualenv: cannot activate multiple versions at once: ${versions[@]}" 1>&2
fi
echo "false"
exit 1
fi
fi
done
shell="${PYENV_SHELL:-${SHELL##*/}}" shell="${PYENV_SHELL:-${SHELL##*/}}"
prefix="$(pyenv-prefix "${versions}")" prefix="$(pyenv-prefix "${venv}")"
unset conda_env if [ -L "${prefix}" ]; then
prefix="$(resolve_link "${prefix}" 2>/dev/null)"
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 fi
if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then
conda_env="${prefix##*/envs/}" # exit as success if the virtualenv is already activated
else if [[ "${VIRTUAL_ENV}" == "${prefix}" ]]; then
conda_env="root" if [ -z "${FORCE}" ]; then
if [ -z "${QUIET}" ]; then
echo "pyenv-virtualenv: version \`${venv}' is already activated" 1>&2
fi
echo "true"
exit 0
fi fi
fi fi
# Display setup instruction, if pyenv-virtualenv has not been initialized. pyenv-sh-deactivate --force --quiet || true
# if 'pyenv virtualenv-init -' is not found in "$profile"
if [ -z "$PYENV_VIRTUALENV_INIT" ]; then
pyenv-virtualenv-init >&2 || true
fi
if [ -n "$VERBOSE" ]; then if [ -n "$PYENV_VIRTUALENV_VERBOSE_ACTIVATE" ]; then
echo "pyenv-virtualenv: activate ${versions}" 1>&2 echo "pyenv-virtualenv: activate ${venv}" 1>&2
fi fi
if [ -z "$no_shell" ]; then if [ -z "$no_shell" ]; then
echo "pyenv shell \"${versions}\";"
# shell version set in pyenv-sh-activate should be unset # shell version set in pyenv-sh-activate should be unset
# https://github.com/yyuu/pyenv-virtualenv/issues/61 # https://github.com/yyuu/pyenv-virtualenv/issues/61
OLDIFS="$IFS"
IFS=:
case "$shell" in case "$shell" in
fish ) fish )
echo "setenv PYENV_ACTIVATE_SHELL 1;" cat <<EOS
setenv PYENV_VERSION "${versions[*]}";
setenv PYENV_ACTIVATE_SHELL 1;
EOS
;; ;;
* ) * )
echo "export PYENV_ACTIVATE_SHELL=1;" cat <<EOS
export PYENV_VERSION="${versions[*]}";
export PYENV_ACTIVATE_SHELL=1;
EOS
;;
esac
IFS="$OLDIFS"
fi
# virtualenv/venv
case "${shell}" in
fish )
cat <<EOS
setenv PYENV_VIRTUAL_ENV "${prefix}";
setenv VIRTUAL_ENV "${prefix}";
EOS
;;
* )
cat <<EOS
export PYENV_VIRTUAL_ENV="${prefix}";
export VIRTUAL_ENV="${prefix}";
EOS
;;
esac
# anaconda/miniconda
if [ -x "${prefix}/bin/conda" ]; then
if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then
CONDA_DEFAULT_ENV="${venv##*/envs/}"
else
CONDA_DEFAULT_ENV="root"
fi
case "${shell}" in
fish )
echo "setenv CONDA_DEFAULT_ENV \"${CONDA_DEFAULT_ENV}\";"
;;
* )
echo "export CONDA_DEFAULT_ENV=\"${CONDA_DEFAULT_ENV}\";"
;; ;;
esac esac
fi fi
if [ -n "${conda_env}" ]; then if [ -n "${PYTHONHOME}" ]; then
# anaconda/miniconda case "${shell}" in
cat <<EOS
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${prefix}";
. "${prefix%/envs/*}/bin/activate" "${conda_env}";
EOS
else
# virtualenv/pyvenv
case "$shell" in
fish ) fish )
cat <<EOS cat <<EOS
set -e PYENV_DEACTIVATE; setenv _OLD_VIRTUAL_PYTHONHOME "${PYTHONHOME}";
setenv PYENV_ACTIVATE "${prefix}"; set -e PYTHONHOME;
. "${prefix}/bin/activate.fish";
EOS EOS
;; ;;
* ) * )
cat <<EOS cat <<EOS
unset PYENV_DEACTIVATE; export _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME}";
export PYENV_ACTIVATE="${prefix}"; unset PYTHONHOME;
. "${prefix}/bin/activate";
EOS EOS
;; ;;
esac esac
fi fi
PYENV_VIRTUALENV_DISABLE_PROMPT="${PYENV_VIRTUALENV_DISABLE_PROMPT:-${PYENV_VIRTUAL_ENV_DISABLE_PROMPT}}"
PYENV_VIRTUALENV_DISABLE_PROMPT="${PYENV_VIRTUALENV_DISABLE_PROMPT:-${VIRTUAL_ENV_DISABLE_PROMPT}}"
if [ -z "${PYENV_VIRTUALENV_DISABLE_PROMPT}" ]; then
case "${shell}" in
fish )
if [ -z "${QUIET}" ]; then
echo "pyenv-virtualenv: prompt changing not working for fish." 1>&2
fi
;;
* )
if [ -z "${QUIET}" ]; then
echo "pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior." 1>&2
fi
cat <<EOS
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(${venv}) \${PS1}";
EOS
;;
esac
fi
# conda package anaconda/miniconda scripts (#173)
if [ -x "${prefix}/bin/conda" ]; then
shopt -s nullglob
case "${shell}" in
fish )
: # conda doesn't support fish
;;
* )
for script in "${prefix}/etc/conda/activate.d"/*.sh; do
echo ". \"${script}\";"
done
;;
esac
shopt -u nullglob
fi

View File

@@ -9,16 +9,24 @@
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
unset NOERROR if [ -z "${PYENV_ROOT}" ]; then
unset VERBOSE PYENV_ROOT="$(pyenv-root)"
fi
unset FORCE
unset QUIET
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
"--no-error" ) "-f" | "--force" )
NOERROR=1 FORCE=1
;; ;;
"--verbose" ) "-q" | "--quiet")
VERBOSE=1 QUIET=1
;;
"-v" | "--verbose" )
unset QUIET
PYENV_VIRTUALENV_VERBOSE_ACTIVATE=1
;; ;;
* ) * )
break break
@@ -27,94 +35,157 @@ while [ $# -gt 0 ]; do
shift 1 shift 1
done done
shell="$(basename "${PYENV_SHELL:-$SHELL}")" if [ -z "${VIRTUAL_ENV}" ]; then
prefix="${PYENV_ACTIVATE:-${VIRTUAL_ENV}}" if [ -z "${FORCE}" ]; then
if [ -z "${QUIET}" ]; then
unset conda_env echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2
fi
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" echo "false"
exit 1 exit 1
fi fi
if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then
conda_env="${prefix##*/envs/}"
else
conda_env="root"
fi
fi fi
if [ -n "${conda_env}" ]; then shell="$(basename "${PYENV_SHELL:-$SHELL}")"
echo "if [ -f \"${prefix%/envs/*}/bin/deactivate\" ]; then" prefix="${VIRTUAL_ENV}"
if [[ "${prefix%/*/envs/*}" == "${PYENV_ROOT}/versions" ]]; then
venv="${prefix#${PYENV_ROOT}/versions/}"
else else
case "$shell" in venv="${prefix##*/}"
fi
if [ -n "$PYENV_VIRTUALENV_VERBOSE_ACTIVATE" ]; then
echo "pyenv-virtualenv: deactivate ${venv}" 1>&2
fi
# conda package anaconda/miniconda scripts (#173)
if [ -x "${prefix}/bin/conda" ]; then
shopt -s nullglob
case "${shell}" in
fish ) fish )
echo "if functions -q deactivate;" : # conda doesn't support fish
;; ;;
* ) * )
echo "if declare -f deactivate 1>/dev/null 2>&1; then" for script in "${prefix}/etc/conda/deactivate.d"/*.sh; do
echo ". \"${script}\";"
done
;; ;;
esac esac
fi shopt -u nullglob
if [ -n "$VERBOSE" ]; then
echo " echo \"pyenv-virtualenv: deactivate ${prefix##*/}\" 1>&2;"
fi fi
if [ -n "${PYENV_ACTIVATE_SHELL}" ]; then if [ -n "${PYENV_ACTIVATE_SHELL}" ]; then
# shell version set in pyenv-sh-activate should be unset # shell version set in pyenv-sh-activate should be unset
# https://github.com/yyuu/pyenv-virtualenv/issues/61 # 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
if [ -n "${conda_env}" ]; then
cat <<EOS
export PYENV_DEACTIVATE="$prefix";
unset PYENV_ACTIVATE;
. "${prefix%/envs/*}/bin/deactivate";
else
EOS
else
case "$shell" in case "$shell" in
fish ) fish )
cat <<EOS cat <<EOS
setenv PYENV_DEACTIVATE "$prefix"; set -e PYENV_VERSION;
set -e PYENV_ACTIVATE; set -e PYENV_ACTIVATE_SHELL;
deactivate;
else;
EOS EOS
;; ;;
* ) * )
cat <<EOS cat <<EOS
export PYENV_DEACTIVATE="$prefix"; unset PYENV_VERSION;
unset PYENV_ACTIVATE; unset PYENV_ACTIVATE_SHELL;
deactivate;
else
EOS EOS
;; ;;
esac esac
fi fi
if [ -z "$NOERROR" ]; then # virtualenv/venv
echo " echo \"pyenv-virtualenv: no virtualenv has been activated.\" 1>&2;" case "${shell}" in
fi
echo " false;"
case "$shell" in
fish ) fish )
echo "end;" cat <<EOS
set -e PYENV_VIRTUAL_ENV;
set -e VIRTUAL_ENV;
EOS
;; ;;
* ) * )
echo "fi;" cat <<EOS
unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV;
EOS
;;
esac
# anaconda/miniconda
if [ -n "${CONDA_DEFAULT_ENV}" ]; then
case "${shell}" in
fish )
echo "set -e CONDA_DEFAULT_ENV;"
;;
* )
echo "unset CONDA_DEFAULT_ENV;"
;;
esac
fi
case "${shell}" in
fish )
cat <<EOS
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
EOS
;;
* )
cat <<EOS
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
EOS
;;
esac
case "${shell}" in
fish )
cat <<EOS
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
EOS
;;
* )
cat <<EOS
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
EOS
;;
esac
case "${shell}" in
fish )
:
;;
* )
cat <<EOS
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
EOS
;;
esac
case "${shell}" in
fish )
cat <<EOS
if functions -q deactivate;
functions -e deactivate;
end;
EOS
;;
* )
cat <<EOS
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi;
EOS
;; ;;
esac esac

View File

@@ -9,20 +9,20 @@
# -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="20151006" PYENV_VIRTUALENV_VERSION="1.0.0"
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
if [ -z "${PYENV_ROOT}" ]; then
PYENV_ROOT="$(pyenv-root)"
fi
# Provide pyenv completions # Provide pyenv completions
if [ "$1" = "--complete" ]; then if [ "$1" = "--complete" ]; then
exec pyenv-versions --bare exec pyenv-versions --bare
fi fi
if [ -z "$PYENV_ROOT" ]; then
PYENV_ROOT="${HOME}/.pyenv"
fi
unset PIP_REQUIRE_VENV unset PIP_REQUIRE_VENV
unset PIP_REQUIRE_VIRTUALENV unset PIP_REQUIRE_VIRTUALENV
@@ -103,45 +103,55 @@ http_get_wget() {
version() { version() {
detect_venv detect_venv
local version local version
if [ -n "$USE_PYVENV" ]; then if [ -n "${USE_CONDA}" ]; then
version="$(pyenv-which pyvenv 2>/dev/null || true)" version="$(pyenv-exec conda --version 2>/dev/null || true)"
version="${version#$(pyenv-root)/versions/}" echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (conda ${version:-unknown})"
version="${version%/bin/pyvenv}"
echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (pyvenv ${version:-unknown})"
else else
version="$(venv --version 2>/dev/null || true)" if [ -n "$USE_M_VENV" ]; then
echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (python -m venv)"
else
version="$(pyenv-exec virtualenv --version 2>/dev/null || true)"
echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (virtualenv ${version:-unknown})" echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (virtualenv ${version:-unknown})"
fi fi
fi
} }
usage() { usage() {
# We can remove the sed fallback once pyenv 0.2.0 is widely available. # We can remove the sed fallback once pyenv 0.2.0 is widely available.
pyenv-help virtualenv 2>/dev/null || sed -ne '/^#/!q;s/.//;s/.//;1,4d;p' < "$0" pyenv-help virtualenv 2>/dev/null || sed -ne '/^#/!q;s/.//;s/.//;1,4d;p' < "$0"
venv --help 2>/dev/null || true if [ -n "${USE_CONDA}" ]; then
pyenv-exec conda create --help 2>/dev/null || true
else
if [ -n "${USE_M_VENV}" ]; then
pyenv-exec python -m venv --help 2>/dev/null || true
else
pyenv-exec virtualenv --help 2>/dev/null || true
fi
fi
[ -z "$1" ] || exit "$1" [ -z "$1" ] || exit "$1"
} }
detect_venv() { detect_venv() {
# Check the existence of executables as a workaround for the issue with pyenv-which-ext # Check the existence of executables as a workaround for the issue with pyenv-which-ext
# https://github.com/yyuu/pyenv-virtualenv/issues/26 # https://github.com/yyuu/pyenv-virtualenv/issues/26
if [ -x "$(pyenv-prefix)/bin/virtualenv" ]; then local prefix="$(pyenv-prefix)"
if [ -x "${prefix}/bin/conda" ]; then
HAS_CONDA=1
else
if [ -x "${prefix}/bin/virtualenv" ]; then
HAS_VIRTUALENV=1 HAS_VIRTUALENV=1
fi fi
if [ -x "$(pyenv-prefix)/bin/pyvenv" ]; then if pyenv-exec python -m venv --help 1>/dev/null 2>&1; then
HAS_PYVENV=1 HAS_M_VENV=1
fi fi
# Use pyvenv only if there is pyvenv, virtualenv is not installed, and `-p` not given
if [ -n "${HAS_PYVENV}" ] && [ -z "${HAS_VIRTUALENV}" ] && [ -z "${VIRTUALENV_PYTHON}" ]; then
USE_PYVENV=1
fi fi
} # Use `python -m venv` only if there is venv available, virtualenv is not installed, and `-p` not given
if [ -n "${HAS_CONDA}" ]; then
venv() { USE_CONDA=1
local args=("$@")
if [ -n "${USE_PYVENV}" ]; then
pyenv-exec pyvenv "${args[@]}"
else else
pyenv-exec virtualenv "${args[@]}" if [ -n "${HAS_M_VENV}" ] && [ -z "${HAS_VIRTUALENV}" ] && [ -z "${VIRTUALENV_PYTHON}" ]; then
USE_M_VENV=1
fi
fi fi
} }
@@ -215,10 +225,11 @@ fi
VIRTUALENV_OPTIONS=() VIRTUALENV_OPTIONS=()
unset FORCE unset FORCE
unset VIRTUALENV_PYTHON unset NO_ENSUREPIP
unset QUIET unset QUIET
unset UPGRADE unset UPGRADE
unset VERBOSE unset VERBOSE
unset VIRTUALENV_PYTHON
parse_options "$@" parse_options "$@"
for option in "${OPTIONS[@]}"; do for option in "${OPTIONS[@]}"; do
@@ -229,6 +240,14 @@ for option in "${OPTIONS[@]}"; do
"h" | "help" ) "h" | "help" )
usage 0 usage 0
;; ;;
"no-pip" )
NO_ENSUREPIP=1
VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--$option"
;;
"no-setuptools" )
NO_ENSUREPIP=1
VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--$option"
;;
"p" | "python" ) "p" | "python" )
VIRTUALENV_PYTHON="${ARGUMENTS[0]}" VIRTUALENV_PYTHON="${ARGUMENTS[0]}"
ARGUMENTS=("${ARGUMENTS[@]:1}") # shift 1 ARGUMENTS=("${ARGUMENTS[@]:1}") # shift 1
@@ -246,6 +265,10 @@ for option in "${OPTIONS[@]}"; do
version version
exit 0 exit 0
;; ;;
"without-pip" )
NO_ENSUREPIP=1
VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--$option"
;;
* ) # virtualenv long options * ) # virtualenv long options
if [[ "$option" == "python="* ]]; then if [[ "$option" == "python="* ]]; then
VIRTUALENV_PYTHON="${option#python=}" VIRTUALENV_PYTHON="${option#python=}"
@@ -261,28 +284,43 @@ if [[ "${#ARGUMENTS[@]}" == 0 ]]; then
exit 1 exit 1
elif [[ "${#ARGUMENTS[@]}" == 1 ]]; then elif [[ "${#ARGUMENTS[@]}" == 1 ]]; then
# If only one argument given, use current version as source version # If only one argument given, use current version as source version
VERSION_NAME="$(pyenv-version-name)" OLDIFS="${IFS}"
IFS=:
VERSION_NAMES=($(pyenv-version-name))
IFS="${OLDIFS}"
VERSION_NAME="${VERSION_NAMES}"
VIRTUALENV_NAME="${ARGUMENTS[0]}" VIRTUALENV_NAME="${ARGUMENTS[0]}"
else else
# Otherwise, use former as source version, and latter as virtualenv version # Otherwise, use former as source version, and latter as virtualenv version
VERSION_NAME="${ARGUMENTS[0]}" VERSION_NAME="${ARGUMENTS[0]}"
VIRTUALENV_NAME="${ARGUMENTS[1]##*/}" VIRTUALENV_NAME="${ARGUMENTS[1]}"
fi fi
if [ -z "${VERSION_NAME}" ] || [ -z "${VIRTUALENV_NAME}" ]; then if [ -z "${VERSION_NAME}" ] || [ -z "${VIRTUALENV_NAME}" ]; then
usage 1 usage 1
fi fi
if [[ "${VIRTUALENV_NAME##*/}" == "system" ]]; then
echo "pyenv-virtualenv: \`system' is not allowed as virtualenv name." 1>&2
exit 1
fi
if [ "$VIRTUALENV_NAME" != "${VIRTUALENV_NAME%[[:space:]]*}" ]; then if [ "$VIRTUALENV_NAME" != "${VIRTUALENV_NAME%[[:space:]]*}" ]; then
echo "pyenv-virtualenv: no whitespace allowed in virtualenv name." 1>&2 echo "pyenv-virtualenv: no whitespace allowed in virtualenv name." 1>&2
exit 1 exit 1
fi fi
if [ "${VIRTUALENV_NAME}" != "${VIRTUALENV_NAME%/*}" ] && [[ "${VIRTUALENV_NAME}" != "${VERSION_NAME%%/*}/envs/${VIRTUALENV_NAME##*/}" ]] ; then
echo "pyenv-virtualenv: no slash 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}"
# Source version must exist before creating virtualenv. # Source version must exist before creating virtualenv.
if ! pyenv-prefix 1>/dev/null 2>&1; then PREFIX="$(pyenv-prefix 2>/dev/null || true)"
if [ ! -d "${PREFIX}" ]; then
echo "pyenv-virtualenv: \`${PYENV_VERSION}' is not installed in pyenv." 1>&2 echo "pyenv-virtualenv: \`${PYENV_VERSION}' is not installed in pyenv." 1>&2
exit 1 exit 1
fi fi
@@ -293,11 +331,34 @@ else
TMP="${TMPDIR%/}" TMP="${TMPDIR%/}"
fi fi
# Not create `system/envs` directory even if source version is `system`
if [[ "${VERSION_NAME%/envs/*}" == "system" ]]; then
VIRTUALENV_NAME="${VIRTUALENV_NAME##*/}"
else
VIRTUALENV_PREFIX="$(pyenv-virtualenv-prefix 2>/dev/null || true)"
if [[ "${VIRTUALENV_PREFIX%/*}" == "${PYENV_ROOT}/versions" ]]; then
VIRTUALENV_NAME="${VIRTUALENV_PREFIX#${PYENV_ROOT}/versions/}/envs/${VIRTUALENV_NAME##*/}"
else
VIRTUALENV_NAME="${VERSION_NAME}/envs/${VIRTUALENV_NAME##*/}"
fi
fi
VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME}" VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME}"
if [[ "${VIRTUALENV_PATH/*/envs/*}" != "${PYENV_ROOT}/versions" ]]; then
COMPAT_VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME##*/}"
fi
if [ -n "${COMPAT_VIRTUALENV_PATH}" ]; then
if [ -e "${COMPAT_VIRTUALENV_PATH}" ] || [ -L "${COMPAT_VIRTUALENV_PATH}" ]; then
echo "pyenv-virtualenv: \`${COMPAT_VIRTUALENV_PATH}' already exists." 1>&2
exit 1
fi
fi
unset HAS_VIRTUALENV unset HAS_VIRTUALENV
unset HAS_PYVENV unset HAS_M_VENV
unset USE_PYVENV unset USE_CONDA
unset USE_M_VENV
detect_venv detect_venv
SEED="$(date "+%Y%m%d%H%M%S").$$" SEED="$(date "+%Y%m%d%H%M%S").$$"
@@ -307,19 +368,46 @@ REQUIREMENTS="${TMP}/requirements.${SEED}.txt"
# Upgrade existing virtualenv # Upgrade existing virtualenv
if [ -n "$UPGRADE" ]; then if [ -n "$UPGRADE" ]; then
FORCE=1 FORCE=1
# pyvenv has `--upgrade` by default # `python -m venv` has `--upgrade` by default
if [ -n "${USE_PYVENV}" ]; then if [ -n "${USE_M_VENV}" ]; then
unset UPGRADE unset UPGRADE
VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--upgrade" VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--upgrade"
fi fi
fi fi
if [ -n "${USE_PYVENV}" ]; then if [ -z "${VIRTUALEN_VERSION}" ]; then
# Unset some arguments not supported by pyvenv case "${PYENV_VERSION}" in
"3.0"* )
NO_ENSUREPIP=1
;;
"3.1"* )
NO_ENSUREPIP=1
;;
"3.2"* | "stackless-3.2"* )
# pip 8.x (bundled with virtualenv 14+) doesn't support 3.2 anymore
# https://github.com/yyuu/pyenv/issues/531
VIRTUALENV_VERSION="13.1.2"
NO_ENSUREPIP=1
;;
esac
fi
if [ -n "${USE_CONDA}" ]; then
# e.g. `conda create -n py35 python=3.5 anaconda`
if [ -n "${VIRTUALENV_PYTHON}" ]; then
VIRTUALENV_PYTHON="${VIRTUALENV_PYTHON##*/}"
VIRTUALENV_PYTHON="${VIRTUALENV_PYTHON#python}"
if [ -n "${VIRTUALENV_PYTHON}" ]; then
VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="python=${VIRTUALENV_PYTHON}"
fi
fi
else
if [ -n "${USE_M_VENV}" ]; then
# Unset some arguments not supported by `python -m venv`
unset QUIET unset QUIET
unset VERBOSE unset VERBOSE
if [ -n "${VIRTUALENV_PYTHON}" ]; then if [ -n "${VIRTUALENV_PYTHON}" ]; then
echo "pyenv-virtualenv: \`--python=${VIRTUALENV_PYTHON}' is not supported by pyvenv." 1>&2 echo "pyenv-virtualenv: \`--python=${VIRTUALENV_PYTHON}' is not supported by \`python -m venv'." 1>&2
exit 1 exit 1
fi fi
else else
@@ -342,11 +430,16 @@ else
fi fi
fi fi
if [ -z "${HAS_VIRTUALENV}" ]; then if [ -z "${HAS_VIRTUALENV}" ]; then
VIRTUALENV_VERSION="==${VIRTUALENV_VERSION}" if [ -n "${VIRTUALENV_VERSION}" ]; then
pyenv-exec pip install $QUIET $VERBOSE "virtualenv${VIRTUALENV_VERSION%==}" virtualenv_spec="virtualenv==${VIRTUALENV_VERSION}"
else
virtualenv_spec="virtualenv"
fi
pyenv-exec pip install $QUIET $VERBOSE "${virtualenv_spec}"
HAS_VIRTUALENV=1 HAS_VIRTUALENV=1
fi fi
fi fi
fi
# Unset environment variables which start with `VIRTUALENV_`. # Unset environment variables which start with `VIRTUALENV_`.
# These variables are reserved for virtualenv. # These variables are reserved for virtualenv.
@@ -400,9 +493,14 @@ if [ -d "${VIRTUALENV_PATH}/bin" ]; then
fi fi
if [ -n "$UPGRADE" ]; then if [ -n "$UPGRADE" ]; then
if [ -n "${NO_ENSUREPIP}" ]; then
echo "pyenv-virtualenv: upgrading will not work with --no-setuptools or --no-pip" 1>&2
exit 1
else
PYENV_VERSION="${VIRTUALENV_NAME}" prepare_requirements PYENV_VERSION="${VIRTUALENV_NAME}" prepare_requirements
fi fi
fi fi
fi
# Execute `before_virtualenv` hooks. # Execute `before_virtualenv` hooks.
for hook in "${before_hooks[@]}"; do eval "$hook"; done for hook in "${before_hooks[@]}"; do eval "$hook"; done
@@ -420,13 +518,28 @@ STATUS=0
# Change to cache directory to reuse them between invocations. # 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="$?" if [ -n "${USE_CONDA}" ]; then
pyenv-exec conda create $QUIET $VERBOSE --name "${VIRTUALENV_PATH##*/}" --yes "${VIRTUALENV_OPTIONS[@]}" python || STATUS="$?"
else
if [ -n "${USE_M_VENV}" ]; then
pyenv-exec python -m venv $QUIET $VERBOSE "${VIRTUALENV_OPTIONS[@]}" "${VIRTUALENV_PATH}" || STATUS="$?"
else
pyenv-exec virtualenv $QUIET $VERBOSE "${VIRTUALENV_OPTIONS[@]}" "${VIRTUALENV_PATH}" || STATUS="$?"
fi
fi
## Create symlink in the `versions` directory for backward compatibility
if [ -d "${VIRTUALENV_PATH}" ] && [ -n "${COMPAT_VIRTUALENV_PATH}" ]; then
ln -fs "${VIRTUALENV_PATH}" "${COMPAT_VIRTUALENV_PATH}"
fi
if [ -z "${NO_ENSUREPIP}" ]; then
## 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
fi
# 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

104
bin/pyenv-virtualenv-delete Executable file
View File

@@ -0,0 +1,104 @@
#!/usr/bin/env bash
#
# Summary: Uninstall a specific Python virtualenv
#
# Usage: pyenv virtualenv-delete [-f|--force] <virtualenv>
#
# -f Attempt to remove the specified virtualenv without prompting
# for confirmation. If the virtualenv does not exist, do not
# display an error message.
#
# See `pyenv virtualenvs` for a complete list of installed versions.
#
set -e
[ -n "$PYENV_DEBUG" ] && set -x
if [ -z "${PYENV_ROOT}" ]; then
PYENV_ROOT="$(pyenv-root)"
fi
# Provide pyenv completions
if [ "$1" = "--complete" ]; then
exec pyenv virtualenvs --bare
fi
resolve_link() {
$(type -p greadlink readlink | head -1) "$1"
}
usage() {
pyenv-help virtualenv-delete 2>/dev/null
[ -z "$1" ] || exit "$1"
}
if [ -z "$PYENV_ROOT" ]; then
PYENV_ROOT="${HOME}/.pyenv"
fi
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
usage 0
fi
unset FORCE
if [ "$1" = "-f" ] || [ "$1" = "--force" ]; then
FORCE=true
shift
fi
[ "$#" -eq 1 ] || usage 1 >&2
DEFINITION="$1"
case "$DEFINITION" in
"" | -* )
usage 1 >&2
;;
esac
VERSION_NAME="${DEFINITION##*/}"
COMPAT_PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}"
if [[ "${DEFINITION}" != "${DEFINITION%/envs/*}" ]]; then
PREFIX="${PYENV_ROOT}/versions/${DEFINITION}"
if [ -L "${COMPAT_PREFIX}" ]; then
if [[ "${PREFIX}" != "$(resolve_link "${COMPAT_PREFIX}" 2>/dev/null || true)" ]]; then
unset COMPAT_PREFIX
fi
fi
else
if [ -L "${COMPAT_PREFIX}" ]; then
PREFIX="$(resolve_link "${COMPAT_PREFIX}" 2>/dev/null || true)"
if [[ "${PREFIX%/*/envs/*}" != "${PYENV_ROOT}/versions" ]]; then
echo "pyenv-virtualenv: \`${COMPAT_PREFIX}' is a symlink for unknown location." 1>&2
exit 1
fi
else
if pyenv-virtualenv-prefix "${VERSION_NAME}" 1>/dev/null 2>&1; then
PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}"
unset COMPAT_PREFIX
else
echo "pyenv-virtualenv: \`${DEFINITION}' is not a virtualenv." 1>&2
exit 1
fi
fi
fi
if [ -z "$FORCE" ]; then
if [ ! -d "$PREFIX" ]; then
echo "pyenv-virtualenv: virtualenv \`$VERSION_NAME' not installed" >&2
exit 1
fi
read -p "pyenv-virtualenv: remove $PREFIX? "
case "$REPLY" in
y* | Y* ) ;;
* ) exit 1 ;;
esac
fi
if [ -d "$PREFIX" ]; then
rm -rf "$PREFIX"
if [ -L "$COMPAT_PREFIX" ]; then
rm -rf "$COMPAT_PREFIX"
fi
pyenv-rehash
fi

View File

@@ -9,6 +9,26 @@
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
resolve_link() {
$(type -p greadlink readlink | head -1) "$1"
}
abs_dirname() {
local cwd="$(pwd)"
local path="$1"
while [ -n "$path" ]; do
cd "${path%/*}"
local name="${path##*/}"
path="$(resolve_link "$name" || true)"
done
pwd
cd "$cwd"
}
PYENV_VIRTUALENV_INSTALL_PREFIX="$(dirname "$(abs_dirname "$0")")"
print="" print=""
for args in "$@" for args in "$@"
do do
@@ -51,7 +71,7 @@ if [ -z "$print" ]; then
echo echo
case "$shell" in case "$shell" in
fish ) fish )
echo 'status --is-interactive; and . (pyenv virtualenv-init -|psub)' echo 'status --is-interactive; and source (pyenv virtualenv-init -|psub)'
;; ;;
* ) * )
echo 'eval "$(pyenv virtualenv-init -)"' echo 'eval "$(pyenv virtualenv-init -)"'
@@ -65,10 +85,16 @@ fi
case "$shell" in case "$shell" in
fish ) fish )
echo "setenv PYENV_VIRTUALENV_INIT 1;" cat <<EOS
setenv PATH '${PYENV_VIRTUALENV_ROOT:-${PYENV_VIRTUALENV_INSTALL_PREFIX}}/shims' \$PATH;
setenv PYENV_VIRTUALENV_INIT 1;
EOS
;; ;;
* ) * )
echo "export PYENV_VIRTUALENV_INIT=1;" cat <<EOS
export PATH="${PYENV_VIRTUALENV_ROOT:-${PYENV_VIRTUALENV_INSTALL_PREFIX}}/shims:\${PATH}";
export PYENV_VIRTUALENV_INIT=1;
EOS
;; ;;
esac esac
@@ -76,26 +102,13 @@ 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) set -l ret \$status
if [ -n "\$PYENV_ACTIVATE" ] if [ -n "\$VIRTUAL_ENV" ]
if [ (pyenv version-name 2>/dev/null; or true) = "system" ] pyenv activate --quiet; or pyenv deactivate --quiet; or true
pyenv deactivate --no-error --verbose
set -e PYENV_DEACTIVATE
return 0
end
if [ "\$PYENV_ACTIVATE" != "\$PYENV_PREFIX" ]
if pyenv deactivate --no-error --verbose
set -e PYENV_DEACTIVATE
pyenv activate --no-error --verbose; or set -e PYENV_DEACTIVATE
else else
pyenv activate --no-error --verbose pyenv activate --quiet; or true
end
end
else
if [ -z "\$VIRTUAL_ENV" ]; and [ "\$PYENV_DEACTIVATE" != "\$PYENV_PREFIX" ]
pyenv activate --no-error --verbose; or true
end
end end
return \$ret
end end
EOS EOS
;; ;;
@@ -113,25 +126,13 @@ esac
if [[ "$shell" != "fish" ]]; then if [[ "$shell" != "fish" ]]; then
cat <<EOS cat <<EOS
if [ -n "\$PYENV_ACTIVATE" ]; then local ret=\$?
if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then if [ -n "\$VIRTUAL_ENV" ]; then
eval "\$(pyenv sh-deactivate --no-error --verbose)" eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true
unset PYENV_DEACTIVATE
return 0
fi
if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
if eval "\$(pyenv sh-deactivate --no-error --verbose)"; then
unset PYENV_DEACTIVATE
eval "\$(pyenv sh-activate --no-error --verbose)" || unset PYENV_DEACTIVATE
else else
eval "\$(pyenv sh-activate --no-error --verbose)" eval "\$(pyenv sh-activate --quiet || true)" || true
fi
fi
else
if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
eval "\$(pyenv sh-activate --no-error --verbose)" || true
fi
fi fi
return \$ret
}; };
EOS EOS
@@ -147,7 +148,7 @@ EOS
cat <<EOS cat <<EOS
typeset -g -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 \$precmd_functions);
fi fi
EOS EOS
;; ;;

View File

@@ -19,47 +19,56 @@ else
IFS=: versions=($(pyenv-version-name)) IFS=: versions=($(pyenv-version-name))
fi fi
real_prefix() { # virtualenv
local version="$1"
PYENV_VERSION="${version}" pyenv-exec python -c 'import sys;print(sys.real_prefix)' 2>/dev/null
}
base_prefix() { # pyvenv
# FIXME: non-pyvenv versions also have sys.base_prefix
local version="$1"
PYENV_VERSION="${version}" pyenv-exec python -c 'import sys;print(sys.base_prefix)' 2>/dev/null
}
VIRTUALENV_PREFIX_PATHS=() VIRTUALENV_PREFIX_PATHS=()
for version_string in "${versions[@]}"; do for version 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}")" PYENV_PREFIX_PATH="$(pyenv-prefix "${version}")"
if [ -f "${PREFIX}/bin/activate" ]; then if [ -x "${PYENV_PREFIX_PATH}/bin/python" ]; then
# Anaconda has `activate` script nevertheless it is not a virtual environment (#65) if [ -f "${PYENV_PREFIX_PATH}/bin/activate" ]; then
if [ -f "${PREFIX}/bin/conda" ]; then if [ -f "${PYENV_PREFIX_PATH}/bin/conda" ]; then
if [[ "${version_string}" != "${version_string%/envs/*}" ]]; then # conda
conda_env="${version_string##*/envs/}" VIRTUALENV_PREFIX_PATH="${PYENV_PREFIX_PATH}"
if [ -f "${PREFIX}/envs/${conda_env}/bin/conda" ]; then
VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "${PREFIX}")
else else
echo "pyenv-virtualenv: version \`${version_string}' is not an environment of anaconda/miniconda" 1>&2 if [ -f "${PYENV_ROOT}/versions/${version}/pyvenv.cfg" ]; then
# venv
virtualenv_binpath="$(cut -b 1-1024 "${PYENV_ROOT}/versions/${version}/pyvenv.cfg" | sed -n '/^ *home *= */s///p' || true)"
VIRTUALENV_PREFIX_PATH="${virtualenv_binpath%/bin}"
else
# virtualenv
if [ -d "${PYENV_ROOT}/versions/${version}/Lib" ]; then
# jython
virtualenv_libpath="${PYENV_ROOT}/versions/${version}/Lib"
else
if [ -d "${PYENV_ROOT}/versions/${version}/lib-python" ]; then
# pypy
virtualenv_libpath="${PYENV_ROOT}/versions/${version}/lib-python"
else
virtualenv_libpath="${PYENV_ROOT}/versions/${version}/lib"
fi
fi
virtualenv_orig_prefix="$(find "${virtualenv_libpath}/" -maxdepth 2 -type f -and -name "orig-prefix.txt" 2>/dev/null | head -1)"
if [ -f "${virtualenv_orig_prefix}" ]; then
VIRTUALENV_PREFIX_PATH="$(cat "${virtualenv_orig_prefix}" 2>/dev/null || true)"
fi
fi
fi
if [ -d "${VIRTUALENV_PREFIX_PATH}" ]; then
VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "${VIRTUALENV_PREFIX_PATH:-${PYENV_PREFIX_PATH}}")
else
echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2
exit 1 exit 1
fi 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
fi fi
else
echo "pyenv-virtualenv: \`python' not found in version \`${version}'" 1>&2
exit 1
fi
done done
IFS=: echo "${VIRTUALENV_PREFIX_PATHS[*]}" IFS=: echo "${VIRTUALENV_PREFIX_PATHS[*]}"

View File

@@ -1,9 +1,9 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# Summary: List all Python virtualenvs found in `$PYENV_ROOT/versions/*'. # Summary: List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.
# Usage: pyenv virtualenvs [--bare] [--skip-aliases]
# #
# Usage: pyenv virtualenvs [--bare] # List all virtualenvs found in `$PYENV_ROOT/versions/*' and its `$PYENV_ROOT/versions/envs/*'.
#
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
@@ -12,54 +12,124 @@ if [ -z "$PYENV_ROOT" ]; then
PYENV_ROOT="${HOME}/.pyenv" PYENV_ROOT="${HOME}/.pyenv"
fi fi
if [ "$1" = "--bare" ]; then unset bare
unset skip_aliases
# Provide pyenv completions
for arg; do
case "$arg" in
--complete )
echo --bare
echo --skip-aliases
exit ;;
--bare ) bare=1 ;;
--skip-aliases ) skip_aliases=1 ;;
* )
pyenv-help --usage virtualenvs >&2
exit 1
;;
esac
done
versions_dir="${PYENV_ROOT}/versions"
if ! enable -f "${BASH_SOURCE%/*}"/../libexec/pyenv-realpath.dylib realpath 2>/dev/null; then
if [ -n "$PYENV_NATIVE_EXT" ]; then
echo "pyenv: failed to load \`realpath' builtin" >&2
exit 1
fi
READLINK=$(type -p greadlink readlink | head -1)
if [ -z "$READLINK" ]; then
echo "pyenv: cannot find readlink - are you missing GNU coreutils?" >&2
exit 1
fi
resolve_link() {
$READLINK "$1"
}
realpath() {
local cwd="$PWD"
local path="$1"
local name
while [ -n "$path" ]; do
name="${path##*/}"
[ "$name" = "$path" ] || cd "${path%/*}"
path="$(resolve_link "$name" || true)"
done
echo "${PWD}/$name"
cd "$cwd"
}
fi
if [ -d "$versions_dir" ]; then
versions_dir="$(realpath "$versions_dir")"
fi
if [ -n "$bare" ]; then
hit_prefix="" hit_prefix=""
miss_prefix="" miss_prefix=""
current_versions=() current_versions=()
print_origin="" unset print_origin
include_system=""
else else
hit_prefix="* " hit_prefix="* "
miss_prefix=" " miss_prefix=" "
current_versions=($(IFS=:; for version in $(pyenv-version-name); do echo "$version"; done)) OLDIFS="$IFS"
IFS=: current_versions=($(pyenv-version-name || true))
IFS="$OLDIFS"
print_origin="1" print_origin="1"
include_system=""
fi fi
array_exists() { num_versions=0
local x car="$1"
exists() {
local car="$1"
local cdar
shift shift
for x in "$@"; do for cdar in "$@"; do
[ "${x}" = "${car}" ] && return 0 if [ "${car}" == "${cdar}" ]; then
return 0
fi
done done
return 1 return 1
} }
print_version() { print_version() {
if [ -n "${print_origin}" ]; then if exists "$1" "${current_versions[@]}"; then
local version_origin="$2" echo "${hit_prefix}${1}${print_origin+$2}"
else else
local version_origin="" echo "${miss_prefix}${1}${print_origin+$2}"
fi
if array_exists "$1" "${current_versions[@]}"; then
echo "${hit_prefix}${1}${version_origin}"
else
echo "${miss_prefix}${1}${version_origin}"
fi fi
num_versions=$((num_versions + 1))
} }
for version in $(pyenv-versions --bare); do
if [[ "${version}" != "system" ]]; then
virtualenv_prefix="$(pyenv-virtualenv-prefix "${version}" 2>/dev/null || true)"
if [ -d "${virtualenv_prefix}" ]; then
print_version "${version}" " (created from ${virtualenv_prefix})"
prefix="$(pyenv-prefix "${version}")"
if [ -f "${prefix}/bin/conda" ]; then
# envs of anaconda/miniconda
shopt -s nullglob shopt -s nullglob
for conda_env in "${prefix}/envs/"*; do for path in "$versions_dir"/*; do
print_version "${version##*/}${conda_env#${prefix}}" " (created from ${prefix})" if [ -d "$path" ]; then
if [ -n "$skip_aliases" ] && [ -L "$path" ]; then
target="$(realpath "$path")"
[ "${target%/*/envs/*}" != "$versions_dir" ] || continue
fi
virtualenv_prefix="$(pyenv-virtualenv-prefix "${path##*/}" 2>/dev/null || true)"
if [ -d "${virtualenv_prefix}" ]; then
print_version "${path##*/}" " (created from ${virtualenv_prefix})"
fi
for venv_path in "${path}/envs/"*; do
venv="${path##*/}/envs/${venv_path##*/}"
virtualenv_prefix="$(pyenv-virtualenv-prefix "${venv}" 2>/dev/null || true)"
if [ -d "${virtualenv_prefix}" ]; then
print_version "${venv}" " (created from ${virtualenv_prefix})"
fi
done
fi
done done
shopt -u nullglob shopt -u nullglob
if [ "$num_versions" -eq 0 ] && [ -n "$include_system" ]; then
echo "Warning: no Python virtualenv detected on the system" >&2
exit 1
fi fi
fi
fi
done

View File

@@ -0,0 +1,11 @@
virtualenv_list_executable_names() {
local file
shopt -s nullglob
for file in "$PYENV_ROOT"/versions/*/envs/*/bin/*; do
echo "${file##*/}"
done
shopt -u nullglob
}
if declare -f make_shims 1>/dev/null 2>&1; then
make_shims $(virtualenv_list_executable_names | sort -u)
fi

View File

@@ -0,0 +1,30 @@
resolve_link() {
$(type -p greadlink readlink | head -1) "$1"
}
if [ -n "${DEFINITION}" ]; then
if [[ "${DEFINITION}" != "${DEFINITION%/envs/*}" ]]; then
# Uninstall virtualenv by long name
exec pyenv-virtualenv-delete ${FORCE+-f} "${DEFINITION}"
exit 128
else
VERSION_NAME="${VERSION_NAME:-${DEFINITION##*/}}"
PREFIX="${PREFIX:-${PYENV_ROOT}/versions/${VERSION_NAME}}"
if [ -L "${PREFIX}" ]; then
REAL_PREFIX="$(resolve_link "${PREFIX}" 2>/dev/null || true)"
REAL_DEFINITION="${REAL_PREFIX#${PYENV_ROOT}/versions/}"
if [[ "${REAL_DEFINITION}" != "${REAL_DEFINITION%/envs/*}" ]]; then
# Uninstall virtualenv by short name
exec pyenv-virtualenv-delete ${FORCE+-f} "${REAL_DEFINITION}"
exit 128
fi
else
# Uninstall all virtualenvs inside `envs` directory too
shopt -s nullglob
for virtualenv in "${PREFIX}/envs/"*; do
pyenv-virtualenv-delete ${FORCE+-f} "${DEFINITION}/envs/${virtualenv##*/}"
done
shopt -u nullglob
fi
fi
fi

View File

@@ -4,11 +4,40 @@
# https://github.com/yyuu/pyenv/issues/397 # https://github.com/yyuu/pyenv/issues/397
if [ ! -x "${PYENV_COMMAND_PATH}" ] && [[ "${PYENV_COMMAND_PATH##*/}" == "python"*"-config" ]]; then if [ ! -x "${PYENV_COMMAND_PATH}" ] && [[ "${PYENV_COMMAND_PATH##*/}" == "python"*"-config" ]]; then
virtualenv_prefix="$(pyenv-virtualenv-prefix 2>/dev/null || true)" OLDIFS="${IFS}"
if [ -d "${virtualenv_prefix}" ]; then IFS=:
version="$(pyenv-version-name)"
IFS="${OLDIFS}"
if [ -f "${PYENV_ROOT}/versions/${version}/bin/activate" ]; then
if [ -f "${PYENV_ROOT}/versions/${version}/bin/conda" ]; then
: # do nothing for conda's environments
else
if [ -f "${PYENV_ROOT}/versions/${version}/bin/pyvenv.cfg" ]; then
# venv
virtualenv_binpath="$(cut -b 1-1024 "${PYENV_ROOT}/versions/${version}/pyvenv.cfg" | sed -n '/^ *home *= */s///p' || true)"
virtualenv_prefix="${virtualenv_binpath%/bin}"
else
# virtualenv
if [ -d "${PYENV_ROOT}/versions/${version}/Lib" ]; then
# jython
virtualenv_libpath="${PYENV_ROOT}/versions/${version}/Lib"
else
if [ -d "${PYENV_ROOT}/versions/${version}/lib-python" ]; then
# pypy
virtualenv_libpath="${PYENV_ROOT}/versions/${version}/lib-python"
else
virtualenv_libpath="${PYENV_ROOT}/versions/${version}/lib"
fi
fi
virtualenv_orig_prefix="$(find "${virtualenv_libpath}/" -maxdepth 2 -type f -and -name "orig-prefix.txt" 2>/dev/null | head -1)"
if [ -f "${virtualenv_orig_prefix}" ]; then
virtualenv_prefix="$(cat "${virtualenv_orig_prefix}" 2>/dev/null || true)"
fi
fi
virtualenv_command_path="${virtualenv_prefix}/bin/${PYENV_COMMAND_PATH##*/}" virtualenv_command_path="${virtualenv_prefix}/bin/${PYENV_COMMAND_PATH##*/}"
if [ -x "${virtualenv_command_path}" ]; then if [ -x "${virtualenv_command_path}" ]; then
PYENV_COMMAND_PATH="${virtualenv_command_path}" PYENV_COMMAND_PATH="${virtualenv_command_path}"
fi fi
fi fi
fi fi
fi

View File

@@ -4,12 +4,45 @@
# https://github.com/yyuu/pyenv-virtualenv/issues/62 # https://github.com/yyuu/pyenv-virtualenv/issues/62
if [ ! -x "${PYENV_COMMAND_PATH}" ]; then if [ ! -x "${PYENV_COMMAND_PATH}" ]; then
virtualenv_prefix="$(pyenv-virtualenv-prefix 2>/dev/null || true)" OLDIFS="${IFS}"
if [ -d "${virtualenv_prefix}" ]; then IFS=:
shopt -s nullglob version="$(pyenv-version-name)"
no_global_site_packages="$(echo "$(pyenv-prefix)/lib/"*"/no-global-site-packages.txt")" IFS="${OLDIFS}"
shopt -u nullglob if [ -f "${PYENV_ROOT}/versions/${version}/bin/activate" ]; then
unset include_system_site_packages
if [ -f "${PYENV_ROOT}/versions/${version}/bin/conda" ]; then
: # do nothing for conda's environments
else
if [ -f "${PYENV_ROOT}/versions/${version}/pyvenv.cfg" ]; then
# venv
virtualenv_binpath="$(cut -b 1-1024 "${PYENV_ROOT}/versions/${version}/pyvenv.cfg" | sed -n '/^ *home *= */s///p' || true)"
virtualenv_prefix="${virtualenv_binpath%/bin}"
if grep -q -i "include-system-site-packages *= *true" "${PYENV_ROOT}/versions/${version}/pyvenv.cfg" 1>/dev/null 2>&1; then
include_system_site_packages=1
fi
else
# virtualenv
if [ -d "${PYENV_ROOT}/versions/${version}/Lib" ]; then
# jython
virtualenv_libpath="${PYENV_ROOT}/versions/${version}/Lib"
else
if [ -d "${PYENV_ROOT}/versions/${version}/lib-python" ]; then
# pypy
virtualenv_libpath="${PYENV_ROOT}/versions/${version}/lib-python"
else
virtualenv_libpath="${PYENV_ROOT}/versions/${version}/lib"
fi
fi
no_global_site_packages="$(find "${virtualenv_libpath}/" -maxdepth 2 -type f -and -name "no-global-site-packages.txt" 2>/dev/null | head -1)"
if [ ! -f "${no_global_site_packages}" ]; then if [ ! -f "${no_global_site_packages}" ]; then
include_system_site_packages=1
fi
virtualenv_orig_prefix="$(find "${virtualenv_libpath}/" -maxdepth 2 -type f -and -name "orig-prefix.txt" 2>/dev/null | head -1)"
if [ -f "${virtualenv_orig_prefix}" ]; then
virtualenv_prefix="$(cat "${virtualenv_orig_prefix}" 2>/dev/null || true)"
fi
fi
if [ -n "${include_system_site_packages}" ] && [ -n "${virtualenv_prefix}" ]; then
# virtualenv is created with `--system-site-packages` # virtualenv is created with `--system-site-packages`
virtualenv_command_path="${virtualenv_prefix}/bin/${PYENV_COMMAND_PATH##*/}" virtualenv_command_path="${virtualenv_prefix}/bin/${PYENV_COMMAND_PATH##*/}"
if [ -x "${virtualenv_command_path}" ]; then if [ -x "${virtualenv_command_path}" ]; then
@@ -18,3 +51,4 @@ if [ ! -x "${PYENV_COMMAND_PATH}" ]; then
fi fi
fi fi
fi fi
fi

View File

@@ -12,7 +12,19 @@ if [ -z "${PREFIX}" ]; then
fi fi
BIN_PATH="${PREFIX}/bin" BIN_PATH="${PREFIX}/bin"
SHIMS_PATH="${PREFIX}/shims"
HOOKS_PATH="${PREFIX}/etc/pyenv.d"
mkdir -p "$BIN_PATH" mkdir -p "$BIN_PATH"
mkdir -p "$SHIMS_PATH"
mkdir -p "$HOOKS_PATH"
install -p bin/* "$BIN_PATH" install -p bin/* "$BIN_PATH"
install -p shims/* "$SHIMS_PATH"
for hook in etc/pyenv.d/*; do
if [ -d "$hook" ]; then
cp -RPp "$hook" "$HOOKS_PATH"
else
install -p -m 0644 "$hook" "$HOOKS_PATH"
fi
done

7
shims/activate Executable file
View File

@@ -0,0 +1,7 @@
#!/usr/bin/env bash
if [[ "$0" != "${BASH_SOURCE}" ]]; then
eval "$(pyenv sh-activate --verbose "$@" || true)"
else
echo "pyenv-virtualenv: activate must be sourced. Run 'source activate envname' instead of 'activate envname'" 1>&2
false
fi

7
shims/deactivate Executable file
View File

@@ -0,0 +1,7 @@
#!/usr/bin/env bash
if [[ "$0" != "${BASH_SOURCE}" ]]; then
eval "$(pyenv sh-deactivate --verbose "$@" || true)"
else
echo "pyenv-virtualenv: deactivate must be sourced. Run 'source deactivate' instead of 'deactivate'" 1>&2
false
fi

View File

@@ -5,6 +5,17 @@ load test_helper
setup() { setup() {
export HOME="${TMP}" export HOME="${TMP}"
export PYENV_ROOT="${TMP}/pyenv" export PYENV_ROOT="${TMP}/pyenv"
unset PYENV_VERSION
unset PYENV_ACTIVATE_SHELL
unset VIRTUAL_ENV
unset CONDA_DEFAULT_ENV
unset PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
unset PYENV_VIRTUALENV_VERBOSE_ACTIVATE
unset PYENV_VIRTUALENV_DISABLE_PROMPT
unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT
unset VIRTUAL_ENV_DISABLE_PROMPT
unset _OLD_VIRTUAL_PS1
} }
@test "activate virtualenv from current version" { @test "activate virtualenv from current version" {
@@ -13,43 +24,77 @@ 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\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate
assert_success
assert_output <<EOS
deactivated
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(venv) \${PS1}";
EOS
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-sh-deactivate
assert_success
assert_output <<EOS
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv";
. "${PYENV_ROOT}/versions/venv/bin/activate";
EOS
} }
@test "activate virtualenv from current version (verbose)" { @test "activate virtualenv from current version (quiet)" {
export PYENV_VIRTUALENV_INIT=1 export PYENV_VIRTUALENV_INIT=1
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\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate --verbose PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate --quiet
assert_success
assert_output <<EOS
deactivated
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(venv) \${PS1}";
EOS
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-sh-deactivate
}
@test "activate virtualenv from current version (verbose)" {
export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUALENV_VERBOSE_ACTIVATE=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\""
stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate --verbose
assert_success assert_success
assert_output <<EOS assert_output <<EOS
deactivated
pyenv-virtualenv: activate venv pyenv-virtualenv: activate venv
unset PYENV_DEACTIVATE; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv"; export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
. "${PYENV_ROOT}/versions/venv/bin/activate"; pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(venv) \${PS1}";
EOS EOS
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
unstub pyenv-sh-deactivate
} }
@test "activate virtualenv from current version (without pyenv-virtualenv-init)" { @test "activate virtualenv from current version (without pyenv-virtualenv-init)" {
@@ -58,27 +103,26 @@ 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\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate
assert_success
assert_output <<EOS
deactivated
export PYENV_VERSION="venv";
export PYENV_ACTIVATE_SHELL=1;
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(venv) \${PS1}";
EOS
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-sh-deactivate
assert_success
assert_output <<EOS
# Load pyenv-virtualenv automatically by adding
# the following to ~/.bash_profile:
eval "\$(pyenv virtualenv-init -)"
pyenv shell "venv";
export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE;
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv";
. "${PYENV_ROOT}/versions/venv/bin/activate";
EOS
} }
@test "activate virtualenv from current version (fish)" { @test "activate virtualenv from current version (fish)" {
@@ -87,20 +131,22 @@ 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\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate
assert_success
assert_output <<EOS
deactivated
setenv PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv";
setenv VIRTUAL_ENV "${PYENV_ROOT}/versions/venv";
pyenv-virtualenv: prompt changing not working for fish.
EOS
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-sh-deactivate
assert_success
assert_output <<EOS
set -e PYENV_DEACTIVATE;
setenv PYENV_ACTIVATE "${PYENV_ROOT}/versions/venv";
. "${PYENV_ROOT}/versions/venv/bin/activate.fish";
EOS
} }
@test "activate virtualenv from current version (fish) (without pyenv-virtualenv-init)" { @test "activate virtualenv from current version (fish) (without pyenv-virtualenv-init)" {
@@ -109,27 +155,24 @@ 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\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate
assert_success
assert_output <<EOS
deactivated
setenv PYENV_VERSION "venv";
setenv PYENV_ACTIVATE_SHELL 1;
setenv PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv";
setenv VIRTUAL_ENV "${PYENV_ROOT}/versions/venv";
pyenv-virtualenv: prompt changing not working for fish.
EOS
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-sh-deactivate
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 "venv";
setenv PYENV_ACTIVATE_SHELL 1;
set -e PYENV_DEACTIVATE;
setenv PYENV_ACTIVATE "${PYENV_ROOT}/versions/venv";
. "${PYENV_ROOT}/versions/venv/bin/activate.fish";
EOS
} }
@test "activate virtualenv from command-line argument" { @test "activate virtualenv from command-line argument" {
@@ -137,21 +180,25 @@ 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\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="venv" 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_success
assert_output <<EOS assert_output <<EOS
pyenv shell "venv27"; deactivated
export PYENV_VERSION="venv27";
export PYENV_ACTIVATE_SHELL=1; export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27";
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv27"; export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27";
. "${PYENV_ROOT}/versions/venv27/bin/activate"; pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(venv27) \${PS1}";
EOS EOS
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
unstub pyenv-sh-deactivate
} }
@test "activate virtualenv from command-line argument (without pyenv-virtualenv-init)" { @test "activate virtualenv from command-line argument (without pyenv-virtualenv-init)" {
@@ -159,26 +206,25 @@ 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\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="venv" 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_success
assert_output <<EOS assert_output <<EOS
# Load pyenv-virtualenv automatically by adding deactivated
# the following to ~/.bash_profile: export PYENV_VERSION="venv27";
eval "\$(pyenv virtualenv-init -)"
pyenv shell "venv27";
export PYENV_ACTIVATE_SHELL=1; export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27";
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv27"; export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27";
. "${PYENV_ROOT}/versions/venv27/bin/activate"; pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(venv27) \${PS1}";
EOS EOS
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
unstub pyenv-sh-deactivate
} }
@test "activate virtualenv from command-line argument (fish)" { @test "activate virtualenv from command-line argument (fish)" {
@@ -186,21 +232,23 @@ 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\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate "venv27" PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate "venv27"
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success assert_success
assert_output <<EOS assert_output <<EOS
pyenv shell "venv27"; deactivated
setenv PYENV_VERSION "venv27";
setenv PYENV_ACTIVATE_SHELL 1; setenv PYENV_ACTIVATE_SHELL 1;
set -e PYENV_DEACTIVATE; setenv PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27";
setenv PYENV_ACTIVATE "${PYENV_ROOT}/versions/venv27"; setenv VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27";
. "${PYENV_ROOT}/versions/venv27/bin/activate.fish"; pyenv-virtualenv: prompt changing not working for fish.
EOS EOS
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
unstub pyenv-sh-deactivate
} }
@test "activate virtualenv from command-line argument (fish) (without pyenv-virtualenv-init)" { @test "activate virtualenv from command-line argument (fish) (without pyenv-virtualenv-init)" {
@@ -208,69 +256,79 @@ 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\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate "venv27" PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate "venv27"
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success assert_success
assert_output <<EOS assert_output <<EOS
# Load pyenv-virtualenv automatically by adding deactivated
# the following to ~/.config/fish/config.fish: setenv PYENV_VERSION "venv27";
status --is-interactive; and . (pyenv virtualenv-init -|psub)
pyenv shell "venv27";
setenv PYENV_ACTIVATE_SHELL 1; setenv PYENV_ACTIVATE_SHELL 1;
set -e PYENV_DEACTIVATE; setenv PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27";
setenv PYENV_ACTIVATE "${PYENV_ROOT}/versions/venv27"; setenv VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27";
. "${PYENV_ROOT}/versions/venv27/bin/activate.fish"; pyenv-virtualenv: prompt changing not working for fish.
EOS EOS
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
unstub pyenv-sh-deactivate
} }
@test "unset invokes deactivate" { @test "unset invokes deactivate" {
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=
stub pyenv-sh-deactivate " : echo deactivated"
run pyenv-sh-activate --unset run pyenv-sh-activate --unset
assert_success assert_success
assert_output <<EOS assert_output <<EOS
pyenv deactivate deactivated
EOS EOS
unstub pyenv-sh-deactivate
} }
@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\"" stub pyenv-version-name " : echo 3.3.3"
stub pyenv-virtualenv-prefix "3.3.3/envs/3.3.3 : false"
run pyenv-sh-activate "3.3.3" run pyenv-sh-activate "3.3.3"
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_failure assert_failure
assert_output <<EOS assert_output <<EOS
pyenv-virtualenv: version \`3.3.3' is not a virtualenv pyenv-virtualenv: version \`3.3.3' is not a virtualenv
false false
EOS EOS
}
@test "should fail if the version is not a virtualenv (no-error)" {
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"
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-version-name
}
@test "should fail if the version is not a virtualenv (quiet)" {
stub pyenv-virtualenv-prefix "3.3.3 : false"
stub pyenv-version-name " : echo 3.3.3"
stub pyenv-virtualenv-prefix "3.3.3/envs/3.3.3 : false"
run pyenv-sh-activate --quiet "3.3.3"
assert_failure assert_failure
assert_output <<EOS assert_output <<EOS
false false
EOS EOS
unstub pyenv-virtualenv-prefix
unstub pyenv-version-name
} }
@test "should fail if there are multiple versions" { @test "should fail if there are multiple versions" {
stub pyenv-virtualenv-prefix "venv : true"
stub pyenv-virtualenv-prefix "venv27 : true"
run pyenv-sh-activate "venv" "venv27" run pyenv-sh-activate "venv" "venv27"
assert_failure assert_failure
@@ -278,15 +336,68 @@ EOS
pyenv-virtualenv: cannot activate multiple versions at once: venv venv27 pyenv-virtualenv: cannot activate multiple versions at once: venv venv27
false false
EOS EOS
unstub pyenv-virtualenv-prefix
} }
@test "should fail if there are multiple versions (no-error)" { @test "should fail if there are multiple virtualenvs (quiet)" {
run pyenv-sh-activate --no-error "venv" "venv27" stub pyenv-virtualenv-prefix "venv : true"
stub pyenv-virtualenv-prefix "venv27 : true"
run pyenv-sh-activate --quiet "venv" "venv27"
assert_failure assert_failure
assert_output <<EOS assert_output <<EOS
false false
EOS EOS
unstub pyenv-virtualenv-prefix
}
@test "should fail if the first version is not a virtualenv" {
export PYENV_VIRTUALENV_INIT=1
stub pyenv-virtualenv-prefix "2.7.10 : false"
stub pyenv-version-name " : echo 2.7.10"
stub pyenv-virtualenv-prefix "2.7.10/envs/2.7.10 : false"
run pyenv-sh-activate "2.7.10" "venv27"
assert_failure
assert_output <<EOS
pyenv-virtualenv: version \`2.7.10' is not a virtualenv
false
EOS
unstub pyenv-virtualenv-prefix
unstub pyenv-version-name
}
@test "activate if the first virtualenv is a virtualenv" {
export PYENV_VIRTUALENV_INIT=1
stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
stub pyenv-virtualenv-prefix "2.7.10 : false"
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
run pyenv-sh-activate "venv27" "2.7.10"
assert_success
assert_output <<EOS
deactivated
export PYENV_VERSION="venv27:2.7.10";
export PYENV_ACTIVATE_SHELL=1;
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27";
pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(venv27) \${PS1}";
EOS
unstub pyenv-sh-deactivate
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
} }
@test "should fail if activate is invoked as a command" { @test "should fail if activate is invoked as a command" {

View File

@@ -5,145 +5,165 @@ load test_helper
setup() { setup() {
export HOME="${TMP}" export HOME="${TMP}"
export PYENV_ROOT="${TMP}/pyenv" export PYENV_ROOT="${TMP}/pyenv"
unset PYENV_VERSION
unset PYENV_ACTIVATE_SHELL
unset PYENV_VIRTUAL_ENV
unset VIRTUAL_ENV
unset CONDA_DEFAULT_ENV
unset PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
unset PYENV_VIRTUALENV_VERBOSE_ACTIVATE
unset PYENV_VIRTUALENV_DISABLE_PROMPT
unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT
unset VIRTUAL_ENV_DISABLE_PROMPT
unset _OLD_VIRTUAL_PS1
} }
@test "activate conda root from current version" { @test "activate conda root from current version" {
export PYENV_VIRTUALENV_INIT=1 export PYENV_VIRTUALENV_INIT=1
create_conda "anaconda-2.3.0" setup_conda "anaconda-2.3.0"
stub pyenv-version-name "echo 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-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\""
stub pyenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0" run pyenv-sh-activate PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0" run pyenv-sh-activate
assert_success
assert_output <<EOS
deactivated
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0";
export CONDA_DEFAULT_ENV="root";
pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(anaconda-2.3.0) \${PS1}";
EOS
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-sh-deactivate
assert_success teardown_conda "anaconda-2.3.0"
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)" { @test "activate conda root from current version (fish)" {
export PYENV_VIRTUALENV_INIT=1 export PYENV_VIRTUALENV_INIT=1
create_conda "anaconda-2.3.0" setup_conda "anaconda-2.3.0"
stub pyenv-version-name "echo 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-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\""
stub pyenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="fish" PYENV_VERSION="anaconda-2.3.0" run pyenv-sh-activate PYENV_SHELL="fish" PYENV_VERSION="anaconda-2.3.0" run pyenv-sh-activate
assert_success
assert_output <<EOS
deactivated
setenv PYENV_VIRTUAL_ENV "${TMP}/pyenv/versions/anaconda-2.3.0";
setenv VIRTUAL_ENV "${TMP}/pyenv/versions/anaconda-2.3.0";
setenv CONDA_DEFAULT_ENV "root";
pyenv-virtualenv: prompt changing not working for fish.
EOS
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-sh-deactivate
assert_failure teardown_conda "anaconda-2.3.0"
assert_output <<EOS
pyenv-virtualenv: Only bash and zsh are supported by Anaconda/Miniconda
false
EOS
} }
@test "activate conda root from command-line argument" { @test "activate conda root from command-line argument" {
export PYENV_VIRTUALENV_INIT=1 export PYENV_VIRTUALENV_INIT=1
create_conda "anaconda-2.3.0" setup_conda "anaconda-2.3.0"
create_conda "miniconda-3.9.1" setup_conda "miniconda-3.9.1"
stub pyenv-virtualenv-prefix "miniconda-3.9.1 : echo \"${PYENV_ROOT}/versions/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\""
stub pyenv-prefix "miniconda-3.9.1 : echo \"${PYENV_ROOT}/versions/miniconda-3.9.1\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0" run pyenv-sh-activate "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_success
assert_output <<EOS assert_output <<EOS
pyenv shell "miniconda-3.9.1"; deactivated
export PYENV_VERSION="miniconda-3.9.1";
export PYENV_ACTIVATE_SHELL=1; export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1";
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/miniconda-3.9.1"; export VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1";
. "${PYENV_ROOT}/versions/miniconda-3.9.1/bin/activate" "root"; export CONDA_DEFAULT_ENV="root";
pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(miniconda-3.9.1) \${PS1}";
EOS EOS
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
unstub pyenv-sh-deactivate
teardown_conda "anaconda-2.3.0"
teardown_conda "miniconda-3.9.1"
} }
@test "activate conda env from current version" { @test "activate conda env from current version" {
export PYENV_VIRTUALENV_INIT=1 export PYENV_VIRTUALENV_INIT=1
create_conda "anaconda-2.3.0" "foo" setup_conda "anaconda-2.3.0" "foo"
stub pyenv-version-name "echo anaconda-2.3.0/envs/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-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\""
stub pyenv-prefix "anaconda-2.3.0/envs/foo : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0/envs/foo" run pyenv-sh-activate PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0/envs/foo" run pyenv-sh-activate
assert_success
assert_output <<EOS
deactivated
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo";
export CONDA_DEFAULT_ENV="foo";
pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(anaconda-2.3.0/envs/foo) \${PS1}";
. "${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo/etc/conda/activate.d/activate.sh";
EOS
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-sh-deactivate
assert_success teardown_conda "anaconda-2.3.0" "foo"
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" { @test "activate conda env from command-line argument" {
export PYENV_VIRTUALENV_INIT=1 export PYENV_VIRTUALENV_INIT=1
create_conda "anaconda-2.3.0" "foo" setup_conda "anaconda-2.3.0" "foo"
create_conda "miniconda-3.9.1" "bar" setup_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-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\""
stub pyenv-prefix "miniconda-3.9.1/envs/bar : echo \"${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar\"" stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0/envs/foo" run pyenv-sh-activate "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_success
assert_output <<EOS assert_output <<EOS
pyenv shell "miniconda-3.9.1/envs/bar"; deactivated
export PYENV_VERSION="miniconda-3.9.1/envs/bar";
export PYENV_ACTIVATE_SHELL=1; export PYENV_ACTIVATE_SHELL=1;
unset PYENV_DEACTIVATE; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar";
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar"; export VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar";
. "${PYENV_ROOT}/versions/miniconda-3.9.1/bin/activate" "bar"; export CONDA_DEFAULT_ENV="bar";
pyenv-virtualenv: prompt changing will be removed from future release. configure \`export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
export _OLD_VIRTUAL_PS1="\${PS1}";
export PS1="(miniconda-3.9.1/envs/bar) \${PS1}";
. "${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar/etc/conda/activate.d/activate.sh";
EOS 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 unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success unstub pyenv-sh-deactivate
assert_output <<EOS teardown_conda "anaconda-2.3.0" "foo"
pyenv shell "miniconda-3.9.1/envs/bar"; teardown_conda "miniconda-3.9.1" "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

@@ -4,61 +4,118 @@ load test_helper
setup() { setup() {
export PYENV_ROOT="${TMP}/pyenv" export PYENV_ROOT="${TMP}/pyenv"
unset PYENV_VERSION
unset PYENV_ACTIVATE_SHELL
unset PYENV_VIRTUAL_ENV
unset VIRTUAL_ENV
unset CONDA_DEFAULT_ENV
unset PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
unset PYENV_VIRTUALENV_VERBOSE_ACTIVATE
unset PYENV_VIRTUALENV_DISABLE_PROMPT
unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT
unset VIRTUAL_ENV_DISABLE_PROMPT
unset _OLD_VIRTUAL_PS1
} }
@test "deactivate conda root" { @test "deactivate conda root" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0" export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0"
export PYENV_ACTIVATE_SHELL= export PYENV_ACTIVATE_SHELL=
export CONDA_DEFAULT_ENV="root"
create_conda "anaconda-2.3.0" setup_conda "anaconda-2.3.0"
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 [ -f "${PYENV_ROOT}/versions/anaconda-2.3.0/bin/deactivate" ]; then unset PYENV_VIRTUAL_ENV;
export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; unset VIRTUAL_ENV;
unset PYENV_ACTIVATE; unset CONDA_DEFAULT_ENV;
. "${PYENV_ROOT}/versions/anaconda-2.3.0/bin/deactivate"; if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
else export PATH="\${_OLD_VIRTUAL_PATH}";
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2; unset _OLD_VIRTUAL_PATH;
false; fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi; fi;
EOS EOS
teardown_conda "anaconda-2.3.0"
} }
@test "deactivate conda root (fish)" { @test "deactivate conda root (fish)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0" export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0"
export PYENV_ACTIVATE_SHELL= export PYENV_ACTIVATE_SHELL=
export CONDA_DEFAULT_ENV="root"
create_conda "anaconda-2.3.0" setup_conda "anaconda-2.3.0"
PYENV_SHELL="fish" run pyenv-sh-deactivate PYENV_SHELL="fish" run pyenv-sh-deactivate
assert_failure assert_success
assert_output <<EOS assert_output <<EOS
pyenv-virtualenv: Only bash and zsh are supported by Anaconda/Miniconda set -e PYENV_VIRTUAL_ENV;
false set -e VIRTUAL_ENV;
set -e CONDA_DEFAULT_ENV;
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -q deactivate;
functions -e deactivate;
end;
EOS EOS
teardown_conda "anaconda-2.3.0"
} }
@test "deactivate conda env" { @test "deactivate conda env" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo" export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo"
export PYENV_ACTIVATE_SHELL= export PYENV_ACTIVATE_SHELL=
export CONDA_DEFAULT_ENV="foo"
create_conda "anaconda-2.3.0" "foo" setup_conda "anaconda-2.3.0" "foo"
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 [ -f "${PYENV_ROOT}/versions/anaconda-2.3.0/bin/deactivate" ]; then . "${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo/etc/conda/deactivate.d/deactivate.sh";
export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; unset PYENV_VIRTUAL_ENV;
unset PYENV_ACTIVATE; unset VIRTUAL_ENV;
. "${PYENV_ROOT}/versions/anaconda-2.3.0/bin/deactivate"; unset CONDA_DEFAULT_ENV;
else if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2; export PATH="\${_OLD_VIRTUAL_PATH}";
false; unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi; fi;
EOS EOS
teardown_conda "anaconda-2.3.0" "foo"
} }

View File

@@ -7,35 +7,35 @@ setup() {
} }
@test "display conda root" { @test "display conda root" {
create_conda "anaconda-2.3.0" setup_conda "anaconda-2.3.0"
stub pyenv-version-name "echo 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\"" 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 PYENV_VERSION="anaconda-2.3.0" run pyenv-virtualenv-prefix
unstub pyenv-version-name
unstub pyenv-prefix
assert_success assert_success
assert_output <<OUT assert_output <<OUT
${PYENV_ROOT}/versions/anaconda-2.3.0 ${PYENV_ROOT}/versions/anaconda-2.3.0
OUT OUT
unstub pyenv-version-name
unstub pyenv-prefix
teardown_conda "anaconda-2.3.0"
} }
@test "display conda env" { @test "display conda env" {
create_conda "anaconda-2.3.0" "foo" setup_conda "anaconda-2.3.0" "foo"
stub pyenv-version-name "echo anaconda-2.3.0/envs/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\"" stub pyenv-prefix "anaconda-2.3.0/envs/foo : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo\""
PYENV_VERSION="anaconda-2.3.0/envs/foo" run pyenv-virtualenv-prefix PYENV_VERSION="anaconda-2.3.0/envs/foo" run pyenv-virtualenv-prefix
unstub pyenv-version-name
unstub pyenv-prefix
assert_success assert_success
assert_output <<OUT assert_output <<OUT
${PYENV_ROOT}/versions/anaconda-2.3.0 ${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo
OUT OUT
unstub pyenv-version-name
unstub pyenv-prefix
teardown_conda "anaconda-2.3.0" "foo"
} }

90
test/conda.bats Normal file
View File

@@ -0,0 +1,90 @@
#!/usr/bin/env bats
load test_helper
setup() {
export PYENV_ROOT="${TMP}/pyenv"
}
stub_pyenv() {
stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-hooks "virtualenv : echo"
stub pyenv-rehash " : echo rehashed"
}
unstub_pyenv() {
unstub pyenv-version-name
unstub pyenv-prefix
unstub pyenv-hooks
unstub pyenv-rehash
}
@test "create virtualenv by conda create" {
export PYENV_VERSION="miniconda3-3.16.0"
setup_conda "${PYENV_VERSION}"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-exec "conda * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true"
run pyenv-virtualenv venv
assert_success
assert_output <<OUT
PYENV_VERSION=miniconda3-3.16.0 conda create --name venv --yes python
rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_m_venv "miniconda3-3.16.0"
}
@test "create virtualenv by conda create with -p" {
export PYENV_VERSION="miniconda3-3.16.0"
setup_conda "${PYENV_VERSION}"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-exec "conda * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true"
run pyenv-virtualenv -p python3.5 venv
assert_success
assert_output <<OUT
PYENV_VERSION=miniconda3-3.16.0 conda create --name venv --yes python=3.5 python
rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_m_venv "miniconda3-3.16.0"
}
@test "create virtualenv by conda create with --python" {
export PYENV_VERSION="miniconda3-3.16.0"
setup_conda "${PYENV_VERSION}"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-exec "conda * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true"
run pyenv-virtualenv --python=python3.5 venv
assert_success
assert_output <<OUT
PYENV_VERSION=miniconda3-3.16.0 conda create --name venv --yes python=3.5 python
rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_m_venv "miniconda3-3.16.0"
}

View File

@@ -4,220 +4,366 @@ load test_helper
setup() { setup() {
export PYENV_ROOT="${TMP}/pyenv" export PYENV_ROOT="${TMP}/pyenv"
unset PYENV_VERSION
unset PYENV_ACTIVATE_SHELL
unset PYENV_VIRTUAL_ENV
unset VIRTUAL_ENV
unset CONDA_DEFAULT_ENV
unset PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
unset PYENV_VIRTUALENV_VERBOSE_ACTIVATE
unset PYENV_VIRTUALENV_DISABLE_PROMPT
unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT
unset VIRTUAL_ENV_DISABLE_PROMPT
unset _OLD_VIRTUAL_PS1
} }
@test "deactivate virtualenv" { @test "deactivate virtualenv" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL= 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
unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then if declare -f deactivate 1>/dev/null 2>&1; then
export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; unset -f deactivate;
unset PYENV_ACTIVATE; fi;
deactivate; EOS
else }
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false; @test "deactivate virtualenv (quiet)" {
export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="bash" run pyenv-sh-deactivate --quit
assert_success
assert_output <<EOS
unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi; fi;
EOS EOS
} }
@test "deactivate virtualenv (verbose)" { @test "deactivate virtualenv (verbose)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL= export PYENV_ACTIVATE_SHELL=
export PYENV_VIRTUALENV_VERBOSE_ACTIVATE=1
PYENV_SHELL="bash" run pyenv-sh-deactivate --verbose PYENV_SHELL="bash" run pyenv-sh-deactivate --verbose
assert_success assert_success
assert_output <<EOS assert_output <<EOS
pyenv-virtualenv: deactivate venv
unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then if declare -f deactivate 1>/dev/null 2>&1; then
echo "pyenv-virtualenv: deactivate venv" 1>&2; unset -f deactivate;
export PYENV_DEACTIVATE="$PYENV_ACTIVATE";
unset PYENV_ACTIVATE;
deactivate;
else
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
fi; fi;
EOS EOS
} }
@test "deactivate virtualenv (no-error)" { @test "deactivate virtualenv (quiet)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL= export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="bash" run pyenv-sh-deactivate --no-error PYENV_SHELL="bash" run pyenv-sh-deactivate --quiet
assert_success assert_success
assert_output <<EOS assert_output <<EOS
unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then if declare -f deactivate 1>/dev/null 2>&1; then
export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; unset -f deactivate;
unset PYENV_ACTIVATE;
deactivate;
else
false;
fi; fi;
EOS EOS
} }
@test "deactivate virtualenv (with shell activation)" { @test "deactivate virtualenv (with shell activation)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=1 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 unset PYENV_VERSION;
pyenv shell --unset;
unset PYENV_ACTIVATE_SHELL; unset PYENV_ACTIVATE_SHELL;
export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; unset PYENV_VIRTUAL_ENV;
unset PYENV_ACTIVATE; unset VIRTUAL_ENV;
deactivate; if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
else export PATH="\${_OLD_VIRTUAL_PATH}";
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2; unset _OLD_VIRTUAL_PATH;
false; fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi; fi;
EOS EOS
} }
@test "deactivate virtualenv (with shell activation) (no-error)" { @test "deactivate virtualenv (with shell activation) (quiet)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=1 export PYENV_ACTIVATE_SHELL=1
PYENV_SHELL="bash" run pyenv-sh-deactivate --no-error PYENV_SHELL="bash" run pyenv-sh-deactivate --quiet
assert_success assert_success
assert_output <<EOS assert_output <<EOS
if declare -f deactivate 1>/dev/null 2>&1; then unset PYENV_VERSION;
pyenv shell --unset;
unset PYENV_ACTIVATE_SHELL; unset PYENV_ACTIVATE_SHELL;
export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; unset PYENV_VIRTUAL_ENV;
unset PYENV_ACTIVATE; unset VIRTUAL_ENV;
deactivate; if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
else export PATH="\${_OLD_VIRTUAL_PATH}";
false; unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi; fi;
EOS EOS
} }
@test "deactivate virtualenv which has been activated manually" { @test "deactivate virtualenv which has been activated manually" {
export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
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
assert_success assert_success
assert_output <<EOS assert_output <<EOS
unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
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"; unset -f deactivate;
unset PYENV_ACTIVATE;
deactivate;
else
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
fi; fi;
EOS EOS
} }
@test "deactivate virtualenv (fish)" { @test "deactivate virtualenv (fish)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL= 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
set -e PYENV_VIRTUAL_ENV;
set -e VIRTUAL_ENV;
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -q deactivate; if functions -q deactivate;
setenv PYENV_DEACTIVATE "$PYENV_ACTIVATE"; functions -e deactivate;
set -e PYENV_ACTIVATE;
deactivate;
else;
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
end; end;
EOS EOS
} }
@test "deactivate virtualenv (fish) (no-error)" { @test "deactivate virtualenv (fish) (quiet)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL= export PYENV_ACTIVATE_SHELL=
PYENV_SHELL="fish" run pyenv-sh-deactivate --no-error PYENV_SHELL="fish" run pyenv-sh-deactivate --quiet
assert_success assert_success
assert_output <<EOS assert_output <<EOS
set -e PYENV_VIRTUAL_ENV;
set -e VIRTUAL_ENV;
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -q deactivate; if functions -q deactivate;
setenv PYENV_DEACTIVATE "$PYENV_ACTIVATE"; functions -e deactivate;
set -e PYENV_ACTIVATE;
deactivate;
else;
false;
end; end;
EOS EOS
} }
@test "deactivate virtualenv (fish) (with shell activation)" { @test "deactivate virtualenv (fish) (with shell activation)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=1 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; set -e PYENV_VERSION;
pyenv shell --unset;
set -e PYENV_ACTIVATE_SHELL; set -e PYENV_ACTIVATE_SHELL;
setenv PYENV_DEACTIVATE "$PYENV_ACTIVATE"; set -e PYENV_VIRTUAL_ENV;
set -e PYENV_ACTIVATE; set -e VIRTUAL_ENV;
deactivate; if [ -n "\$_OLD_VIRTUAL_PATH" ];
else; setenv PATH "\$_OLD_VIRTUAL_PATH";
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2; set -e _OLD_VIRTUAL_PATH;
false; end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -q deactivate;
functions -e deactivate;
end; end;
EOS EOS
} }
@test "deactivate virtualenv (fish) (with shell activation) (no-error)" { @test "deactivate virtualenv (fish) (with shell activation) (quiet)" {
export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=1 export PYENV_ACTIVATE_SHELL=1
PYENV_SHELL="fish" run pyenv-sh-deactivate --no-error PYENV_SHELL="fish" run pyenv-sh-deactivate --quiet
assert_success assert_success
assert_output <<EOS assert_output <<EOS
if functions -q deactivate; set -e PYENV_VERSION;
pyenv shell --unset;
set -e PYENV_ACTIVATE_SHELL; set -e PYENV_ACTIVATE_SHELL;
setenv PYENV_DEACTIVATE "$PYENV_ACTIVATE"; set -e PYENV_VIRTUAL_ENV;
set -e PYENV_ACTIVATE; set -e VIRTUAL_ENV;
deactivate; if [ -n "\$_OLD_VIRTUAL_PATH" ];
else; setenv PATH "\$_OLD_VIRTUAL_PATH";
false; set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -q deactivate;
functions -e deactivate;
end; end;
EOS EOS
} }
@test "deactivate virtualenv which has been activated manually (fish)" { @test "deactivate virtualenv which has been activated manually (fish)" {
export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
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
assert_success assert_success
assert_output <<EOS assert_output <<EOS
set -e PYENV_VIRTUAL_ENV;
set -e VIRTUAL_ENV;
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -q deactivate; if functions -q deactivate;
setenv PYENV_DEACTIVATE "$VIRTUAL_ENV"; functions -e deactivate;
set -e PYENV_ACTIVATE;
deactivate;
else;
echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2;
false;
end; end;
EOS EOS
} }

88
test/delete.bats Normal file
View File

@@ -0,0 +1,88 @@
#!/usr/bin/env bats
load test_helper
setup() {
export PYENV_ROOT="${TMP}/pyenv"
}
@test "delete virtualenv" {
mkdir -p "${PYENV_ROOT}/versions/venv27"
stub pyenv-virtualenv-prefix "venv27 : true"
stub pyenv-rehash "true"
run pyenv-virtualenv-delete -f "venv27"
assert_success
unstub pyenv-virtualenv-prefix
unstub pyenv-rehash
[ ! -d "${PYENV_ROOT}/versions/venv27" ]
}
@test "delete virtualenv by symlink" {
mkdir -p "${PYENV_ROOT}/versions/2.7.11/envs/venv27"
ln -fs "${PYENV_ROOT}/versions/2.7.11/envs/venv27" "${PYENV_ROOT}/versions/venv27"
stub pyenv-rehash "true"
run pyenv-virtualenv-delete -f "venv27"
assert_success
unstub pyenv-rehash
[ ! -d "${PYENV_ROOT}/versions/2.7.11/envs/venv27" ]
[ ! -L "${PYENV_ROOT}/versions/venv27" ]
}
@test "delete virtualenv with symlink" {
mkdir -p "${PYENV_ROOT}/versions/2.7.11/envs/venv27"
ln -fs "${PYENV_ROOT}/versions/2.7.11/envs/venv27" "${PYENV_ROOT}/versions/venv27"
stub pyenv-rehash "true"
run pyenv-virtualenv-delete -f "2.7.11/envs/venv27"
assert_success
unstub pyenv-rehash
[ ! -d "${PYENV_ROOT}/versions/2.7.11/envs/venv27" ]
[ ! -L "${PYENV_ROOT}/versions/venv27" ]
}
@test "not delete virtualenv with different symlink" {
mkdir -p "${PYENV_ROOT}/versions/2.7.8/envs/venv27"
mkdir -p "${PYENV_ROOT}/versions/2.7.11/envs/venv27"
ln -fs "${PYENV_ROOT}/versions/2.7.8/envs/venv27" "${PYENV_ROOT}/versions/venv27"
stub pyenv-rehash "true"
run pyenv-virtualenv-delete -f "2.7.11/envs/venv27"
assert_success
unstub pyenv-rehash
[ ! -d "${PYENV_ROOT}/versions/2.7.11/envs/venv27" ]
[ -L "${PYENV_ROOT}/versions/venv27" ]
}
@test "not delete virtualenv with same name" {
mkdir -p "${PYENV_ROOT}/versions/2.7.11/envs/venv27"
mkdir -p "${PYENV_ROOT}/versions/venv27"
stub pyenv-rehash "true"
run pyenv-virtualenv-delete -f "2.7.11/envs/venv27"
assert_success
unstub pyenv-rehash
[ ! -d "${PYENV_ROOT}/versions/2.7.11/envs/venv27" ]
[ -d "${PYENV_ROOT}/versions/venv27" ]
}

47
test/envs.bats Normal file
View File

@@ -0,0 +1,47 @@
#!/usr/bin/env bats
load test_helper
setup() {
export PYENV_ROOT="${TMP}/envs/pyenv"
}
stub_pyenv() {
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-hooks "virtualenv : echo"
stub pyenv-rehash " : echo rehashed"
}
unstub_pyenv() {
unstub pyenv-prefix
unstub pyenv-hooks
unstub pyenv-rehash
}
@test "path should be handled properly even if there is 'envs' in PYENV_ROOT" {
export PYENV_VERSION="3.5.1"
setup_m_venv "3.5.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-version-name "echo '${PYENV_VERSION}'"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : true"
stub pyenv-exec "python -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin"
stub pyenv-exec "python -s -m ensurepip : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin/pip"
run pyenv-virtualenv venv
assert_success
assert_output <<OUT
PYENV_VERSION=3.5.1 python -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
PYENV_VERSION=3.5.1/envs/venv python -s -m ensurepip
rehashed
OUT
assert [ -e "${PYENV_ROOT}/versions/3.5.1/envs/venv/bin/pip" ]
unstub_pyenv
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_m_venv "3.5.1"
}

View File

@@ -13,23 +13,30 @@ setup() {
before_virtualenv 'echo before: \$VIRTUALENV_PATH' before_virtualenv 'echo before: \$VIRTUALENV_PATH'
after_virtualenv 'echo after: \$STATUS' after_virtualenv 'echo after: \$STATUS'
OUT OUT
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.2.1'" setup_version "3.5.1"
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.2.1'" create_executable "3.5.1" "virtualenv"
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.2.1'" stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.5.1'"
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.5.1'"
stub pyenv-exec "python -m venv --help : true"
stub pyenv-hooks "virtualenv : echo '$HOOK_PATH'/virtualenv.bash" stub pyenv-hooks "virtualenv : echo '$HOOK_PATH'/virtualenv.bash"
stub pyenv-exec "echo PYENV_VERSION=3.2.1 \"\$@\"" stub pyenv-exec "echo PYENV_VERSION=3.5.1 \"\$@\""
stub pyenv-exec "echo PYENV_VERSION=3.5.1 \"\$@\""
stub pyenv-rehash "echo rehashed" stub pyenv-rehash "echo rehashed"
create_executable "3.2.1" "virtualenv" run pyenv-virtualenv "3.5.1" venv
remove_executable "3.2.1" "pyvenv"
run pyenv-virtualenv "3.2.1" venv
assert_success assert_success
assert_output <<-OUT assert_output <<-OUT
before: ${PYENV_ROOT}/versions/venv before: ${PYENV_ROOT}/versions/3.5.1/envs/venv
PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.5.1 virtualenv ${PYENV_ROOT}/versions/3.5.1/envs/venv
PYENV_VERSION=3.5.1 python -s -m ensurepip
after: 0 after: 0
rehashed rehashed
OUT OUT
unstub pyenv-prefix
unstub pyenv-hooks
unstub pyenv-exec
unstub pyenv-rehash
teardown_version "3.5.1"
} }

View File

@@ -42,34 +42,24 @@ load test_helper
@test "fish instructions" { @test "fish instructions" {
run pyenv-virtualenv-init fish run pyenv-virtualenv-init fish
assert [ "$status" -eq 1 ] assert [ "$status" -eq 1 ]
assert_output_contains 'status --is-interactive; and . (pyenv virtualenv-init -|psub)' assert_output_contains 'status --is-interactive; and source (pyenv virtualenv-init -|psub)'
} }
@test "outputs bash-specific syntax" { @test "outputs bash-specific syntax" {
export PYENV_VIRTUALENV_ROOT="${TMP}/pyenv/plugins/pyenv-virtualenv"
run pyenv-virtualenv-init - bash run pyenv-virtualenv-init - bash
assert_success assert_success
assert_output <<EOS assert_output <<EOS
export PATH="${TMP}/pyenv/plugins/pyenv-virtualenv/shims:\${PATH}";
export PYENV_VIRTUALENV_INIT=1; export PYENV_VIRTUALENV_INIT=1;
_pyenv_virtualenv_hook() { _pyenv_virtualenv_hook() {
if [ -n "\$PYENV_ACTIVATE" ]; then local ret=\$?
if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then if [ -n "\$VIRTUAL_ENV" ]; then
eval "\$(pyenv sh-deactivate --no-error --verbose)" eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true
unset PYENV_DEACTIVATE
return 0
fi
if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
if eval "\$(pyenv sh-deactivate --no-error --verbose)"; then
unset PYENV_DEACTIVATE
eval "\$(pyenv sh-activate --no-error --verbose)" || unset PYENV_DEACTIVATE
else else
eval "\$(pyenv sh-activate --no-error --verbose)" eval "\$(pyenv sh-activate --quiet || true)" || true
fi
fi
else
if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
eval "\$(pyenv sh-activate --no-error --verbose)" || true
fi
fi fi
return \$ret
}; };
if ! [[ "\$PROMPT_COMMAND" =~ _pyenv_virtualenv_hook ]]; then if ! [[ "\$PROMPT_COMMAND" =~ _pyenv_virtualenv_hook ]]; then
PROMPT_COMMAND="_pyenv_virtualenv_hook;\$PROMPT_COMMAND"; PROMPT_COMMAND="_pyenv_virtualenv_hook;\$PROMPT_COMMAND";
@@ -78,64 +68,43 @@ EOS
} }
@test "outputs fish-specific syntax" { @test "outputs fish-specific syntax" {
export PYENV_VIRTUALENV_ROOT="${TMP}/pyenv/plugins/pyenv-virtualenv"
run pyenv-virtualenv-init - fish run pyenv-virtualenv-init - fish
assert_success assert_success
assert_output <<EOS assert_output <<EOS
setenv PATH '${TMP}/pyenv/plugins/pyenv-virtualenv/shims' \$PATH;
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) set -l ret \$status
if [ -n "\$PYENV_ACTIVATE" ] if [ -n "\$VIRTUAL_ENV" ]
if [ (pyenv version-name 2>/dev/null; or true) = "system" ] pyenv activate --quiet; or pyenv deactivate --quiet; or true
pyenv deactivate --no-error --verbose
set -e PYENV_DEACTIVATE
return 0
end
if [ "\$PYENV_ACTIVATE" != "\$PYENV_PREFIX" ]
if pyenv deactivate --no-error --verbose
set -e PYENV_DEACTIVATE
pyenv activate --no-error --verbose; or set -e PYENV_DEACTIVATE
else else
pyenv activate --no-error --verbose pyenv activate --quiet; or true
end
end
else
if [ -z "\$VIRTUAL_ENV" ]; and [ "\$PYENV_DEACTIVATE" != "\$PYENV_PREFIX" ]
pyenv activate --no-error --verbose; or true
end
end end
return \$ret
end end
EOS EOS
} }
@test "outputs zsh-specific syntax" { @test "outputs zsh-specific syntax" {
export PYENV_VIRTUALENV_ROOT="${TMP}/pyenv/plugins/pyenv-virtualenv"
run pyenv-virtualenv-init - zsh run pyenv-virtualenv-init - zsh
assert_success assert_success
assert_output <<EOS assert_output <<EOS
export PATH="${TMP}/pyenv/plugins/pyenv-virtualenv/shims:\${PATH}";
export PYENV_VIRTUALENV_INIT=1; export PYENV_VIRTUALENV_INIT=1;
_pyenv_virtualenv_hook() { _pyenv_virtualenv_hook() {
if [ -n "\$PYENV_ACTIVATE" ]; then local ret=\$?
if [ "\$(pyenv version-name 2>/dev/null || true)" = "system" ]; then if [ -n "\$VIRTUAL_ENV" ]; then
eval "\$(pyenv sh-deactivate --no-error --verbose)" eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true
unset PYENV_DEACTIVATE
return 0
fi
if [ "\$PYENV_ACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
if eval "\$(pyenv sh-deactivate --no-error --verbose)"; then
unset PYENV_DEACTIVATE
eval "\$(pyenv sh-activate --no-error --verbose)" || unset PYENV_DEACTIVATE
else else
eval "\$(pyenv sh-activate --no-error --verbose)" eval "\$(pyenv sh-activate --quiet || true)" || true
fi
fi
else
if [ -z "\$VIRTUAL_ENV" ] && [ "\$PYENV_DEACTIVATE" != "\$(pyenv prefix 2>/dev/null || true)" ]; then
eval "\$(pyenv sh-activate --no-error --verbose)" || true
fi
fi fi
return \$ret
}; };
typeset -g -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 \$precmd_functions);
fi fi
EOS EOS
} }

View File

@@ -21,54 +21,56 @@ unstub_pyenv() {
} }
@test "install pip with ensurepip" { @test "install pip with ensurepip" {
export PYENV_VERSION="3.4.1" export PYENV_VERSION="3.5.1"
setup_m_venv "3.5.1"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${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-virtualenv-prefix " : false"
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 venv --help : true"
stub pyenv-exec "python -s -m ensurepip : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/venv/bin/pip" stub pyenv-exec "python -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin"
stub pyenv-exec "python -s -m ensurepip : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin/pip"
remove_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv"
run pyenv-virtualenv venv run pyenv-virtualenv venv
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.4.1 pyvenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.5.1 python -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
PYENV_VERSION=venv python -s -m ensurepip PYENV_VERSION=3.5.1/envs/venv python -s -m ensurepip
rehashed rehashed
OUT OUT
assert [ -e "${PYENV_ROOT}/versions/venv/bin/pip" ] assert [ -e "${PYENV_ROOT}/versions/3.5.1/envs/venv/bin/pip" ]
unstub_pyenv unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
teardown_m_venv "3.5.1"
} }
@test "install pip without using ensurepip" { @test "install pip without using ensurepip" {
export PYENV_VERSION="3.3.5" export PYENV_VERSION="3.3.6"
setup_m_venv "3.3.6"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${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-virtualenv-prefix " : false"
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 venv --help : true"
stub pyenv-exec "python -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.3.6/envs/venv/bin"
stub pyenv-exec "python -s -m ensurepip : false" stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/venv/bin/pip" stub pyenv-exec "python -s */get-pip.py : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/3.3.6/envs/venv/bin/pip"
stub curl true stub curl true
remove_executable "3.3.5" "virtualenv"
create_executable "3.3.5" "pyvenv"
run pyenv-virtualenv venv run pyenv-virtualenv venv
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.3.5 pyvenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.3.6 python -m venv ${PYENV_ROOT}/versions/3.3.6/envs/venv
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
PYENV_VERSION=venv python -s ${TMP}/pyenv/cache/get-pip.py PYENV_VERSION=3.3.6/envs/venv python -s ${TMP}/pyenv/cache/get-pip.py
rehashed rehashed
OUT OUT
assert [ -e "${PYENV_ROOT}/versions/venv/bin/pip" ] assert [ -e "${PYENV_ROOT}/versions/3.3.6/envs/venv/bin/pip" ]
unstub_pyenv unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
teardown_m_venv "3.3.6"
} }

246
test/prefix.bats Normal file
View File

@@ -0,0 +1,246 @@
#!/usr/bin/env bats
load test_helper
setup() {
export PYENV_ROOT="${TMP}/pyenv"
}
create_version() {
mkdir -p "${PYENV_ROOT}/versions/$1/bin"
touch "${PYENV_ROOT}/versions/$1/bin/python"
chmod +x "${PYENV_ROOT}/versions/$1/bin/python"
}
remove_version() {
rm -fr "${PYENV_ROOT}/versions/$1"
}
create_virtualenv() {
create_version "$1"
create_version "${2:-$1}"
mkdir -p "${PYENV_ROOT}/versions/$1/lib/python${2:-$1}"
echo "${PYENV_ROOT}/versions/${2:-$1}" > "${PYENV_ROOT}/versions/$1/lib/python${2:-$1}/orig-prefix.txt"
touch "${PYENV_ROOT}/versions/$1/bin/activate"
}
create_virtualenv_jython() {
create_version "$1"
create_version "${2:-$1}"
mkdir -p "${PYENV_ROOT}/versions/$1/Lib/"
echo "${PYENV_ROOT}/versions/${2:-$1}" > "${PYENV_ROOT}/versions/$1/Lib/orig-prefix.txt"
touch "${PYENV_ROOT}/versions/$1/bin/activate"
}
create_virtualenv_pypy() {
create_version "$1"
create_version "${2:-$1}"
mkdir -p "${PYENV_ROOT}/versions/$1/lib-python/${2:-$1}"
echo "${PYENV_ROOT}/versions/${2:-$1}" > "${PYENV_ROOT}/versions/$1/lib-python/${2:-$1}/orig-prefix.txt"
touch "${PYENV_ROOT}/versions/$1/bin/activate"
}
remove_virtualenv() {
remove_version "$1"
remove_version "${2:-$1}"
}
create_m_venv() {
create_version "$1"
create_version "${2:-$1}"
echo "home = ${PYENV_ROOT}/versions/${2:-$1}/bin" > "${PYENV_ROOT}/versions/$1/pyvenv.cfg"
touch "${PYENV_ROOT}/versions/$1/bin/activate"
}
remove_m_venv() {
remove_version "${2:-$1}"
}
create_conda() {
create_version "$1"
create_version "${2:-$1}"
touch "${PYENV_ROOT}/versions/$1/bin/conda"
touch "${PYENV_ROOT}/versions/$1/bin/activate"
mkdir -p "${PYENV_ROOT}/versions/${2:-$1}/bin"
touch "${PYENV_ROOT}/versions/${2:-$1}/bin/conda"
touch "${PYENV_ROOT}/versions/${2:-$1}/bin/activate"
}
remove_conda() {
remove_version "${2:-$1}"
}
@test "display prefix of virtualenv created by virtualenv" {
stub pyenv-version-name "echo foo"
stub pyenv-prefix "foo : echo \"${PYENV_ROOT}/versions/foo\""
create_virtualenv "foo" "2.7.11"
PYENV_VERSION="foo" run pyenv-virtualenv-prefix
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/2.7.11
OUT
unstub pyenv-version-name
unstub pyenv-prefix
remove_virtualenv "foo" "2.7.11"
}
@test "display prefix of virtualenv created by virtualenv (pypy)" {
stub pyenv-version-name "echo foo"
stub pyenv-prefix "foo : echo \"${PYENV_ROOT}/versions/foo\""
create_virtualenv_pypy "foo" "pypy-4.0.1"
PYENV_VERSION="foo" run pyenv-virtualenv-prefix
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/pypy-4.0.1
OUT
unstub pyenv-version-name
unstub pyenv-prefix
remove_virtualenv "foo" "pypy-4.0.1"
}
@test "display prefix of virtualenv created by virtualenv (jython)" {
stub pyenv-version-name "echo foo"
stub pyenv-prefix "foo : echo \"${PYENV_ROOT}/versions/foo\""
create_virtualenv_jython "foo" "jython-2.7.0"
PYENV_VERSION="foo" run pyenv-virtualenv-prefix
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/jython-2.7.0
OUT
unstub pyenv-version-name
unstub pyenv-prefix
remove_virtualenv "foo" "jython-2.7.0"
}
@test "display prefixes of virtualenv created by virtualenv" {
stub pyenv-version-name "echo foo:bar"
stub pyenv-prefix "foo : echo \"${PYENV_ROOT}/versions/foo\"" \
"bar : echo \"${PYENV_ROOT}/versions/bar\""
create_virtualenv "foo" "2.7.11"
create_virtualenv "bar" "3.5.1"
PYENV_VERSION="foo:bar" run pyenv-virtualenv-prefix
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/2.7.11:${PYENV_ROOT}/versions/3.5.1
OUT
unstub pyenv-version-name
unstub pyenv-prefix
remove_virtualenv "foo" "2.7.11"
remove_virtualenv "bar" "3.5.1"
}
@test "display prefix of virtualenv created by venv" {
stub pyenv-version-name "echo foo"
stub pyenv-prefix "foo : echo \"${PYENV_ROOT}/versions/foo\""
create_m_venv "foo" "3.3.6"
PYENV_VERSION="foo" run pyenv-virtualenv-prefix
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/3.3.6
OUT
unstub pyenv-version-name
unstub pyenv-prefix
remove_m_venv "foo" "3.3.6"
}
@test "display prefixes of virtualenv created by venv" {
stub pyenv-version-name "echo foo:bar"
stub pyenv-prefix "foo : echo \"${PYENV_ROOT}/versions/foo\"" \
"bar : echo \"${PYENV_ROOT}/versions/bar\""
create_m_venv "foo" "3.3.6"
create_m_venv "bar" "3.4.4"
PYENV_VERSION="foo:bar" run pyenv-virtualenv-prefix
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/3.3.6:${PYENV_ROOT}/versions/3.4.4
OUT
unstub pyenv-version-name
unstub pyenv-prefix
remove_m_venv "foo" "3.3.6"
remove_m_venv "bar" "3.4.4"
}
@test "display prefix of virtualenv created by conda" {
stub pyenv-version-name "echo miniconda3-3.16.0/envs/foo"
stub pyenv-prefix "miniconda3-3.16.0/envs/foo : echo \"${PYENV_ROOT}/versions/miniconda3-3.16.0/envs/foo\""
create_conda "miniconda3-3.16.0/envs/foo" "miniconda3-3.16.0"
PYENV_VERSION="miniconda3-3.16.0/envs/foo" run pyenv-virtualenv-prefix
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/miniconda3-3.16.0/envs/foo
OUT
unstub pyenv-version-name
unstub pyenv-prefix
remove_conda "miniconda3-3.16.0/envs/foo" "miniconda3-3.16.0"
}
@test "should fail if the version is the system" {
stub pyenv-version-name "echo system"
PYENV_VERSION="system" run pyenv-virtualenv-prefix
assert_failure
assert_output <<OUT
pyenv-virtualenv: version \`system' is not a virtualenv
OUT
unstub pyenv-version-name
}
@test "should fail if the version is not a virtualenv" {
stub pyenv-version-name "echo 3.4.4"
stub pyenv-prefix "3.4.4 : echo \"${PYENV_ROOT}/versions/3.4.4\""
create_version "3.4.4"
PYENV_VERSION="3.4.4" run pyenv-virtualenv-prefix
assert_failure
assert_output <<OUT
pyenv-virtualenv: version \`3.4.4' is not a virtualenv
OUT
unstub pyenv-version-name
unstub pyenv-prefix
remove_version "3.4.4"
}
@test "should fail if one of the versions is not a virtualenv" {
stub pyenv-version-name "echo venv33:3.4.4"
stub pyenv-prefix "venv33 : echo \"${PYENV_ROOT}/versions/venv33\"" \
"3.4.4 : echo \"${PYENV_ROOT}/versions/3.4.4\""
create_virtualenv "venv33" "3.3.6"
create_version "3.4.4"
PYENV_VERSION="venv33:3.4.4" run pyenv-virtualenv-prefix
assert_failure
assert_output <<OUT
pyenv-virtualenv: version \`3.4.4' is not a virtualenv
OUT
unstub pyenv-version-name
unstub pyenv-prefix
remove_virtualenv "venv33" "3.3.6"
remove_version "3.4.4"
}

View File

@@ -5,8 +5,8 @@ load test_helper
setup() { setup() {
export PYENV_ROOT="${TMP}/pyenv" export PYENV_ROOT="${TMP}/pyenv"
export PYENV_VERSION="2.7.8" export PYENV_VERSION="2.7.8"
create_executable "${PYENV_VERSION}" "virtualenv" setup_version "2.7.8"
remove_executable "${PYENV_VERSION}" "pyvenv" create_executable "2.7.8" "virtualenv"
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-prefix "echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'" stub pyenv-prefix "echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
@@ -22,6 +22,7 @@ teardown() {
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-hooks unstub pyenv-hooks
unstub pyenv-rehash unstub pyenv-rehash
teardown_version "2.7.8"
rm -fr "$TMP"/* rm -fr "$TMP"/*
} }
@@ -30,14 +31,15 @@ teardown() {
create_executable "2.7.8" "python2.7" create_executable "2.7.8" "python2.7"
remove_executable "2.7.9" "python2.7" remove_executable "2.7.9" "python2.7"
stub pyenv-exec "virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.8/bin/python2.7 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv --verbose * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true" stub pyenv-exec "python -s -m ensurepip : true"
stub pyenv-which "python2.7 : echo ${PYENV_ROOT}/versions/2.7.8/bin/python2.7" stub pyenv-which "python2.7 : echo ${PYENV_ROOT}/versions/2.7.8/bin/python2.7"
run pyenv-virtualenv --verbose --python=python2.7 venv run pyenv-virtualenv --verbose --python=python2.7 venv
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=2.7.8 virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.8/bin/python2.7 ${PYENV_ROOT}/versions/venv PYENV_VERSION=2.7.8 virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.8/bin/python2.7 ${PYENV_ROOT}/versions/2.7.8/envs/venv
OUT OUT
assert_success assert_success
@@ -54,7 +56,8 @@ OUT
remove_executable "2.7.8" "python2.7" remove_executable "2.7.8" "python2.7"
create_executable "2.7.9" "python2.7" create_executable "2.7.9" "python2.7"
stub pyenv-exec "virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.9/bin/python2.7 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv --verbose * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true" stub pyenv-exec "python -s -m ensurepip : true"
stub pyenv-which "python2.7 : false" stub pyenv-which "python2.7 : false"
stub pyenv-whence "python2.7 : echo 2.7.7; echo 2.7.8; echo 2.7.9" stub pyenv-whence "python2.7 : echo 2.7.7; echo 2.7.8; echo 2.7.9"
@@ -63,7 +66,7 @@ OUT
run pyenv-virtualenv --verbose --python=python2.7 venv run pyenv-virtualenv --verbose --python=python2.7 venv
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=2.7.8 virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.9/bin/python2.7 ${PYENV_ROOT}/versions/venv PYENV_VERSION=2.7.8 virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.9/bin/python2.7 ${PYENV_ROOT}/versions/2.7.8/envs/venv
OUT OUT
assert_success assert_success

View File

@@ -20,156 +20,153 @@ unstub_pyenv() {
unstub pyenv-rehash unstub pyenv-rehash
} }
@test "use pyvenv if virtualenv is not available" { @test "use venv if virtualenv is not available" {
export PYENV_VERSION="3.4.1" export PYENV_VERSION="3.5.1"
setup_m_venv "3.5.1"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${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-virtualenv-prefix " : false"
stub pyenv-exec "pyvenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "python -m venv --help : true"
stub pyenv-exec "python -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true" stub pyenv-exec "python -s -m ensurepip : true"
remove_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv"
run pyenv-virtualenv venv run pyenv-virtualenv venv
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.4.1 pyvenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.5.1 python -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
rehashed rehashed
OUT OUT
unstub_pyenv unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
teardown_m_venv "3.5.1"
} }
@test "not use pyvenv if virtualenv is available" { @test "not use venv if virtualenv is available" {
export PYENV_VERSION="3.4.1" export PYENV_VERSION="3.5.1"
setup_m_venv "3.5.1"
create_executable "3.5.1" "virtualenv"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${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-virtualenv-prefix " : false"
stub pyenv-exec "virtualenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "python -m venv --help : true"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true" stub pyenv-exec "python -s -m ensurepip : true"
create_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv"
run pyenv-virtualenv venv run pyenv-virtualenv venv
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.4.1 virtualenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.5.1 virtualenv ${PYENV_ROOT}/versions/3.5.1/envs/venv
rehashed rehashed
OUT OUT
unstub_pyenv unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
teardown_m_venv "3.5.1"
} }
@test "install virtualenv if pyvenv is not avaialble" { @test "install virtualenv if venv is not avaialble" {
export PYENV_VERSION="3.2.1" export PYENV_VERSION="3.2.1"
setup_version "3.2.1"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${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-virtualenv-prefix " : false"
stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "pip install virtualenv* : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false" stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s */get-pip.py : true"
stub curl true
remove_executable "3.2.1" "virtualenv"
remove_executable "3.2.1" "pyvenv"
run pyenv-virtualenv venv run pyenv-virtualenv venv
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.2.1 pip install virtualenv PYENV_VERSION=3.2.1 pip install virtualenv==13.1.2
PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/3.2.1/envs/venv
Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT
unstub_pyenv unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
unstub curl teardown_version "3.2.1"
} }
@test "install virtualenv if -p has given" { @test "install virtualenv if -p has given" {
export PYENV_VERSION="3.4.1" export PYENV_VERSION="3.5.1"
setup_m_venv "3.5.1"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${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-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : true"
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=${TMP}/python3 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true" stub pyenv-exec "python -s -m ensurepip : true"
remove_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv"
run pyenv-virtualenv -p ${TMP}/python3 venv run pyenv-virtualenv -p ${TMP}/python3 venv
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.4.1 pip install virtualenv PYENV_VERSION=3.5.1 pip install virtualenv
PYENV_VERSION=3.4.1 virtualenv --python=${TMP}/python3 ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.5.1 virtualenv --python=${TMP}/python3 ${PYENV_ROOT}/versions/3.5.1/envs/venv
rehashed rehashed
OUT OUT
assert_success assert_success
unstub_pyenv unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
teardown_m_venv "3.5.1"
} }
@test "install virtualenv if --python has given" { @test "install virtualenv if --python has given" {
export PYENV_VERSION="3.4.1" export PYENV_VERSION="3.5.1"
setup_m_venv "3.5.1"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${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-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : true"
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=${TMP}/python3 ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true" stub pyenv-exec "python -s -m ensurepip : true"
remove_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv"
run pyenv-virtualenv --python=${TMP}/python3 venv run pyenv-virtualenv --python=${TMP}/python3 venv
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.4.1 pip install virtualenv PYENV_VERSION=3.5.1 pip install virtualenv
PYENV_VERSION=3.4.1 virtualenv --python=${TMP}/python3 ${PYENV_ROOT}/versions/venv PYENV_VERSION=3.5.1 virtualenv --python=${TMP}/python3 ${PYENV_ROOT}/versions/3.5.1/envs/venv
rehashed rehashed
OUT OUT
assert_success assert_success
unstub_pyenv unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
teardown_m_venv "3.5.1"
} }
@test "install virtualenv with unsetting troublesome pip options" { @test "install virtualenv with unsetting troublesome pip options" {
export PYENV_VERSION="3.2.1" export PYENV_VERSION="3.2.1"
setup_version "3.2.1"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${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-virtualenv-prefix " : false"
stub pyenv-exec "pip install virtualenv : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv ${PYENV_ROOT}/versions/venv : 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 "python -s -m ensurepip : false" stub pyenv-exec "virtualenv * : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s */get-pip.py : true"
stub curl true
remove_executable "3.2.1" "virtualenv"
remove_executable "3.2.1" "pyvenv"
PIP_REQUIRE_VENV="true" run pyenv-virtualenv venv PIP_REQUIRE_VENV="true" run pyenv-virtualenv venv
assert_success assert_success
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==13.1.2
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/3.2.1/envs/venv
Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT
unstub_pyenv unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
unstub curl teardown_version "3.2.1"
} }

View File

@@ -117,18 +117,54 @@ remove_executable() {
rm -f "${PYENV_ROOT}/versions/$1/bin/$2" rm -f "${PYENV_ROOT}/versions/$1/bin/$2"
} }
create_conda() { setup_version() {
local version="$1" create_executable "$1" "python"
remove_executable "$1" "activate"
remove_executable "$1" "conda"
}
teardown_version() {
rm -fr "${PYENV_ROOT}/versions/$1"
}
setup_virtualenv() {
create_executable "$1" "python"
create_executable "$1" "activate"
remove_executable "$1" "conda"
}
teardown_virtualenv() {
rm -fr "${PYENV_ROOT}/versions/$1"
}
setup_m_venv() {
create_executable "$1" "python"
create_executable "$1" "activate"
remove_executable "$1" "conda"
}
teardown_m_venv() {
rm -fr "${PYENV_ROOT}/versions/$1"
}
setup_conda() {
create_executable "$1" "python"
create_executable "$1" "activate"
create_executable "$1" "conda"
local conda="$1"
shift 1 shift 1
mkdir -p "${PYENV_ROOT}/versions/$version/bin" local env
touch "${PYENV_ROOT}/versions/$version/bin/activate" for env; do
touch "${PYENV_ROOT}/versions/$version/bin/conda" create_executable "${conda}/envs/${env}" "python"
chmod +x "${PYENV_ROOT}/versions/$version/bin/conda" create_executable "${conda}/envs/${env}" "activate"
local conda_env create_executable "${conda}/envs/${env}" "conda"
for conda_env; do mkdir -p "${PYENV_ROOT}/versions/${conda}/envs/${env}/etc/conda/activate.d"
mkdir -p "${PYENV_ROOT}/versions/$version/envs/$conda_env/bin" touch "${PYENV_ROOT}/versions/${conda}/envs/${env}/etc/conda/activate.d/activate.sh"
touch "${PYENV_ROOT}/versions/$version/envs/$conda_env/bin/activate" mkdir -p "${PYENV_ROOT}/versions/${conda}/envs/${env}/etc/conda/deactivate.d"
touch "${PYENV_ROOT}/versions/$version/envs/$conda_env/bin/conda" touch "${PYENV_ROOT}/versions/${conda}/envs/${env}/etc/conda/deactivate.d/deactivate.sh"
chmod +x "${PYENV_ROOT}/versions/$version/envs/$conda_env/bin/conda"
done done
} }
teardown_conda() {
rm -fr "${PYENV_ROOT}/versions/$1"
}

View File

@@ -4,40 +4,34 @@ load test_helper
setup() { setup() {
export PYENV_ROOT="${TMP}/pyenv" export PYENV_ROOT="${TMP}/pyenv"
export PYENV_VIRTUALENV_VERSION="20151006"
} }
@test "display virtualenv version" { @test "display virtualenv version" {
setup_virtualenv "2.7.7"
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/2.7.7'" stub pyenv-prefix "echo '${PYENV_ROOT}/versions/2.7.7'"
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/2.7.7'" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv --version : echo \"1.11\"" stub pyenv-exec "virtualenv --version : echo \"1.11\""
create_executable "2.7.7" "virtualenv"
remove_executable "2.7.7" "pyvenv"
run pyenv-virtualenv --version run pyenv-virtualenv --version
assert_success assert_success
assert_output "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (virtualenv 1.11)" [[ "$output" == "pyenv-virtualenv "?.?.?" (virtualenv 1.11)" ]]
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-exec unstub pyenv-exec
teardown_virtualenv "2.7.7"
} }
@test "display pyvenv version" { @test "display venv version" {
setup_m_venv "3.4.1"
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.4.1'" stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.4.1'"
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.4.1'" stub pyenv-exec "python -m venv --help : true"
stub pyenv-which "pyvenv : echo \"${PYENV_ROOT}/versions/3.4.1/bin/pyvenv\""
stub pyenv-root "echo \"${PYENV_ROOT}\""
remove_executable "3.4.1" "virtualenv"
create_executable "3.4.1" "pyvenv"
run pyenv-virtualenv --version run pyenv-virtualenv --version
assert_success assert_success
assert_output "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (pyvenv 3.4.1)" [[ "$output" == "pyenv-virtualenv "?.?.?" (python -m venv)" ]]
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-root teardown_m_venv "3.4.1"
} }

View File

@@ -1,158 +0,0 @@
#!/usr/bin/env bats
load test_helper
setup() {
export PYENV_ROOT="${TMP}/pyenv"
}
create_virtualenv() {
mkdir -p "${PYENV_ROOT}/versions/$1/bin"
touch "${PYENV_ROOT}/versions/$1/bin/activate"
}
remove_virtualenv() {
rm -fr "${PYENV_ROOT}/versions/$1"
}
@test "display prefix with using sys.real_prefix" {
stub pyenv-version-name "echo venv27"
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\""
stub pyenv-exec "echo \"${PYENV_ROOT}/versions/2.7.6\""
create_virtualenv "venv27"
PYENV_VERSION="venv27" run pyenv-virtualenv-prefix
unstub pyenv-version-name
unstub pyenv-prefix
unstub pyenv-exec
remove_virtualenv "venv27"
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/2.7.6
OUT
}
@test "display prefixes with using sys.real_prefix" {
stub pyenv-version-name "echo venv27:venv32"
stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" \
"venv32 : echo \"${PYENV_ROOT}/versions/venv32\""
stub pyenv-exec "echo \"${PYENV_ROOT}/versions/2.7.6\"" \
"echo \"${PYENV_ROOT}/versions/3.2.1\""
create_virtualenv "venv27"
create_virtualenv "venv32"
PYENV_VERSION="venv27:venv32" run pyenv-virtualenv-prefix
unstub pyenv-version-name
unstub pyenv-prefix
unstub pyenv-exec
remove_virtualenv "venv27"
remove_virtualenv "venv32"
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/2.7.6:${PYENV_ROOT}/versions/3.2.1
OUT
}
@test "display prefix with using sys.base_prefix" {
stub pyenv-version-name "echo venv33"
stub pyenv-prefix "venv33 : echo \"${PYENV_ROOT}/versions/venv33\""
stub pyenv-exec "false" \
"echo \"${PYENV_ROOT}/versions/3.3.3\""
create_virtualenv "venv33"
PYENV_VERSION="venv33" run pyenv-virtualenv-prefix
unstub pyenv-version-name
unstub pyenv-prefix
unstub pyenv-exec
remove_virtualenv "venv33"
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/3.3.3
OUT
}
@test "display prefixes with using sys.base_prefix" {
stub pyenv-version-name "echo venv33:venv34"
stub pyenv-prefix "venv33 : echo \"${PYENV_ROOT}/versions/venv33\"" \
"venv34 : echo \"${PYENV_ROOT}/versions/venv34\""
stub pyenv-exec "false" \
"echo \"${PYENV_ROOT}/versions/3.3.3\"" \
"false" \
"echo \"${PYENV_ROOT}/versions/3.4.0\""
create_virtualenv "venv33"
create_virtualenv "venv34"
PYENV_VERSION="venv33:venv34" run pyenv-virtualenv-prefix
unstub pyenv-version-name
unstub pyenv-prefix
unstub pyenv-exec
remove_virtualenv "venv33"
remove_virtualenv "venv34"
assert_success
assert_output <<OUT
${PYENV_ROOT}/versions/3.3.3:${PYENV_ROOT}/versions/3.4.0
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" {
stub pyenv-version-name "echo 3.4.0"
stub pyenv-prefix "3.4.0 : echo \"${PYENV_ROOT}/versions/3.4.0\""
mkdir -p "${PYENV_ROOT}/versions/3.4.0"
PYENV_VERSION="3.4.0" run pyenv-virtualenv-prefix
unstub pyenv-version-name
unstub pyenv-prefix
rmdir "${PYENV_ROOT}/versions/3.4.0"
assert_failure
assert_output <<OUT
pyenv-virtualenv: version \`3.4.0' is not a virtualenv
OUT
}
@test "should fail if one of the versions is not a virtualenv" {
stub pyenv-version-name "echo venv33:3.4.0"
stub pyenv-prefix "venv33 : echo \"${PYENV_ROOT}/versions/venv33\"" \
"3.4.0 : echo \"${PYENV_ROOT}/versions/3.4.0\""
stub pyenv-exec "false" \
"echo \"${PYENV_ROOT}/versions/3.3.3\""
create_virtualenv "venv33"
mkdir -p "${PYENV_ROOT}/versions/3.4.0"
PYENV_VERSION="venv33:3.4.0" run pyenv-virtualenv-prefix
unstub pyenv-version-name
unstub pyenv-prefix
unstub pyenv-exec
remove_virtualenv "venv33"
rmdir "${PYENV_ROOT}/versions/3.4.0"
assert_failure
assert_output <<OUT
pyenv-virtualenv: version \`3.4.0' is not a virtualenv
OUT
}

View File

@@ -7,10 +7,8 @@ setup() {
} }
stub_pyenv() { stub_pyenv() {
setup_version "${PYENV_VERSION}"
create_executable "${PYENV_VERSION}" "virtualenv" create_executable "${PYENV_VERSION}" "virtualenv"
remove_executable "${PYENV_VERSION}" "pyvenv"
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-prefix "echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-hooks "virtualenv : echo" stub pyenv-hooks "virtualenv : echo"
@@ -21,35 +19,41 @@ unstub_pyenv() {
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-hooks unstub pyenv-hooks
unstub pyenv-rehash unstub pyenv-rehash
teardown_version "${PYENV_VERSION}"
} }
@test "create virtualenv from given version" { @test "create virtualenv from given version" {
export PYENV_VERSION="3.2.1" export PYENV_VERSION="2.7.11"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${PYENV_VERSION}"
stub pyenv-exec "virtualenv ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false" stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : true" stub pyenv-exec "python -s */get-pip.py : true"
stub curl true stub curl true
run pyenv-virtualenv "3.2.1" "venv" run pyenv-virtualenv "2.7.11" "venv"
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=2.7.11 virtualenv ${PYENV_ROOT}/versions/2.7.11/envs/venv
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT
unstub_pyenv unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
unstub curl unstub curl
} }
@test "create virtualenv from current version" { @test "create virtualenv from current version" {
export PYENV_VERSION="3.2.1" export PYENV_VERSION="2.7.11"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${PYENV_VERSION}"
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-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false" stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : true" stub pyenv-exec "python -s */get-pip.py : true"
stub curl true stub curl true
@@ -58,22 +62,25 @@ OUT
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/venv PYENV_VERSION=2.7.11 virtualenv ${PYENV_ROOT}/versions/2.7.11/envs/venv
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT
unstub_pyenv unstub_pyenv
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
unstub curl unstub curl
} }
@test "create virtualenv with short options" { @test "create virtualenv with short options" {
export PYENV_VERSION="3.2.1" export PYENV_VERSION="2.7.11"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${PYENV_VERSION}"
stub pyenv-version-name "echo \${PYENV_VERSION}" stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-exec "virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false" stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : true" stub pyenv-exec "python -s */get-pip.py : true"
stub curl true stub curl true
@@ -81,7 +88,7 @@ OUT
run pyenv-virtualenv -v -p ${TMP}/python venv run pyenv-virtualenv -v -p ${TMP}/python venv
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.2.1 virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/venv PYENV_VERSION=2.7.11 virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/2.7.11/envs/venv
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT
@@ -89,15 +96,18 @@ OUT
unstub_pyenv unstub_pyenv
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
unstub curl unstub curl
} }
@test "create virtualenv with long options" { @test "create virtualenv with long options" {
export PYENV_VERSION="3.2.1" export PYENV_VERSION="2.7.11"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${PYENV_VERSION}"
stub pyenv-version-name "echo \${PYENV_VERSION}" stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-exec "virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/venv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false" stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : true" stub pyenv-exec "python -s */get-pip.py : true"
stub curl true stub curl true
@@ -105,7 +115,7 @@ OUT
run pyenv-virtualenv --verbose --python=${TMP}/python venv run pyenv-virtualenv --verbose --python=${TMP}/python venv
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.2.1 virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/venv PYENV_VERSION=2.7.11 virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/2.7.11/envs/venv
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed rehashed
OUT OUT
@@ -113,12 +123,13 @@ OUT
unstub_pyenv unstub_pyenv
unstub pyenv-version-name unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-exec unstub pyenv-exec
unstub curl unstub curl
} }
@test "no whitespace allowed in virtualenv name" { @test "no whitespace allowed in virtualenv name" {
run pyenv-virtualenv "3.2.1" "foo bar" run pyenv-virtualenv "2.7.11" "foo bar"
assert_failure assert_failure
assert_output <<OUT assert_output <<OUT
@@ -127,10 +138,53 @@ OUT
} }
@test "no tab allowed in virtualenv name" { @test "no tab allowed in virtualenv name" {
run pyenv-virtualenv "3.2.1" "foo bar baz" run pyenv-virtualenv "2.7.11" "foo bar baz"
assert_failure assert_failure
assert_output <<OUT assert_output <<OUT
pyenv-virtualenv: no whitespace allowed in virtualenv name. pyenv-virtualenv: no whitespace allowed in virtualenv name.
OUT OUT
} }
@test "system not allowed as virtualenv name" {
run pyenv-virtualenv "2.7.11" "system"
assert_failure
assert_output <<OUT
pyenv-virtualenv: \`system' is not allowed as virtualenv name.
OUT
}
@test "no slash allowed in virtualenv name" {
run pyenv-virtualenv "2.7.11" "foo/bar"
assert_failure
assert_output <<OUT
pyenv-virtualenv: no slash allowed in virtualenv name.
OUT
}
@test "slash allowed if it is the long name of the virtualenv" {
export PYENV_VERSION="2.7.11"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : true"
stub curl true
run pyenv-virtualenv "2.7.11" "2.7.11/envs/foo"
assert_success
assert_output <<OUT
PYENV_VERSION=2.7.11 virtualenv ${PYENV_ROOT}/versions/2.7.11/envs/foo
Installing pip from https://bootstrap.pypa.io/get-pip.py...
rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
unstub curl
}

View File

@@ -12,66 +12,55 @@ setup() {
@test "list virtual environments only" { @test "list virtual environments only" {
stub pyenv-version-name ": echo system" stub pyenv-version-name ": echo system"
stub pyenv-versions "--bare : echo \"system\";echo \"2.7.6\";echo \"3.3.3\";echo \"venv27\";echo \"venv33\""
stub pyenv-virtualenv-prefix "2.7.6 : false" stub pyenv-virtualenv-prefix "2.7.6 : false"
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-versions
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success assert_success
assert_output <<OUT assert_output <<OUT
venv27 (created from ${PYENV_ROOT}/versions/2.7.6) venv27 (created from ${PYENV_ROOT}/versions/2.7.6)
venv33 (created from ${PYENV_ROOT}/versions/3.3.3) venv33 (created from ${PYENV_ROOT}/versions/3.3.3)
OUT OUT
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
} }
@test "list virtual environments with hit prefix" { @test "list virtual environments with hit prefix" {
stub pyenv-version-name ": echo venv33" stub pyenv-version-name ": echo venv33"
stub pyenv-versions "--bare : echo \"system\";echo \"venv27\";echo \"venv33\"" stub pyenv-virtualenv-prefix "2.7.6 : false"
stub pyenv-virtualenv-prefix "3.3.3 : false"
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-versions
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
assert_success assert_success
assert_output <<OUT assert_output <<OUT
venv27 (created from /usr) venv27 (created from /usr)
* venv33 (created from /usr) * venv33 (created from /usr)
OUT OUT
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
} }
@test "list virtual environments with --bare" { @test "list virtual environments with --bare" {
stub pyenv-versions "--bare : echo \"system\";echo \"venv27\";echo \"venv33\"" stub pyenv-virtualenv-prefix "2.7.6 : false"
stub pyenv-virtualenv-prefix "3.3.3 : false"
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-virtualenv-prefix
unstub pyenv-prefix
assert_success assert_success
assert_output <<OUT assert_output <<OUT
venv27 venv27
venv33 venv33
OUT OUT
unstub pyenv-virtualenv-prefix
} }