69 Commits

Author SHA1 Message Date
Jovier A. Jiménez
e83e7496fa remove redundant environment variable declaration 2024-09-14 16:26:24 -07:00
Jovier A. Jiménez
6c523f4ce3 add example of custom prompt string 2024-09-14 16:24:29 -07:00
Jovier A. Jiménez
119c4db68c update test setup to unset PYENV_VIRTUALENV_PROMPT 2024-09-14 16:23:01 -07:00
Jovier A. Jiménez
83fae32522 update README with example 2024-02-19 21:30:57 -08:00
Jovier A. Jiménez
96d066e44c update tests 2024-02-19 21:19:08 -08:00
Jovier A. Jiménez
9f3afd0cfb allow users to configure prompt add-on 2024-02-19 21:18:56 -08:00
Romir K
0f83c33a3b Add fish prompt changing (#475) 2024-02-12 12:58:27 +03:00
John HU
2b2b87a25a Bump pyenv-virtualenv reporting version to match release (#471)
The latest release so far (Dec 2023) is 1.2.2, but the version reported is still 1.2.1:
https://github.com/pyenv/pyenv-virtualenv/releases/tag/v1.2.2
2023-12-06 06:56:52 +03:00
Jason Mobarak
38a6561f96 fix: add colorize helper (#470) 2023-11-29 11:37:00 +03:00
native-api
c85c1c9ed5 Link python*-config into VE (#460)
Required to build binaries that link against Python.
Carl Meyer, the champion for PEP 0405, has confirmed that there isn't a particular reason why `venv` doesn't do that.
2023-06-27 01:36:04 +03:00
Elijah Lynn
cd6a51ad68 Add fish install oneliner (#322)
Co-authored-by: Ivan Pozdeev <vano@mail.mipt.ru>
2023-04-17 00:01:19 +03:00
Marcin Konowalczyk
85d8c5aabf More helpful error message when env's base version is not installed (#454) 2023-04-10 21:42:47 +03:00
Josh French
fca12418ca Add activate/deactivate hooks (#452) 2023-03-22 20:39:55 +03:00
Jack McIvor
13bc1877ef Update PYENV_VIRTUALENV_VERSION (#449)
Co-authored-by: Jack McIvor <j.mcivor@draftkings.com>
2023-02-07 19:37:47 +03:00
Ivan Pozdeev
a724aaa149 Merge branch 'master' of https://github.com/pyenv/pyenv-virtualenv 2023-02-01 00:27:32 +03:00
Ivan Pozdeev
f4162706d8 Remove Bountysource from advertized donation sources
Same as in Pyenv, as it's gone rogue
2023-02-01 00:27:13 +03:00
native-api
77a7644ff7 Remove prompt deprecation warning (#447)
Prompt removal was never done and is not planned anymore
2023-01-31 23:14:52 +03:00
Ivan Pozdeev
826f3fbe6f ISSUE_TEMPLATE.md: Add Zsh PS4 2023-01-31 23:02:54 +03:00
native-api
a6ab660b72 Support a prefix resolved by pyenv-latest as base version (#446) 2023-01-29 23:47:22 +03:00
Ville Skyttä
d5f2878a97 Strip -<suffix> when autodetecting shell (#377)
For example bash-5.1, bash-static.
2022-10-18 20:37:46 +03:00
Andrew Christianson
c4de2555b7 Use realpath of scripts to determine relative locations (#308)
Just using paths relative to ${BASH_SOURCE} to access `libexec`
fails if the scripts are symlinked to a location,
such as when installed with Homebrew,
since the `libexec` directory is not linked into `brew --prefix`.

Implement a simple version of `realpath`
and run `${BASH_SOURCE}` through it.
This gets the actual installation directory
relative to which `libexec` is located.

Co-authored-by: Andrew Christianson <achristianson@edmunds.com>
2022-10-14 04:37:08 +03:00
Diego Fernández Giraldo
633711a0bc Return control to pyenv-uninstall in uninstall/envs.bash (#321) 2022-10-12 22:36:52 +03:00
P M
177eb67af3 Enhance documentation about options for pyenv virtualenv (#425)
Co-authored-by: Ivan Pozdeev <vano@mail.mipt.ru>
2022-10-12 22:12:21 +03:00
native-api
0a1839d22a Set up Github Actions CI (#440)
* Adjust tests: update Pip URLs, update expected output to match newer code
* Test library: improve failure message to eliminate the illusion of extra leading space in "actual" output
* Use Bats 1.2.0 like Pyenv
* Install greadlink for old MacOS
* Delete duplicate test
2022-10-12 21:30:36 +03:00
Ville Skyttä
4054162a1c Fix errors when set -u is set in the user's shell (#350) 2022-10-12 07:41:29 +03:00
Ville Skyttä
9a57cd7711 Clone bats with --depth=1, gitignore it (#351) 2022-10-11 22:53:34 +03:00
Ville Skyttä
3c0edf888e Spelling fixes (#352) 2022-10-10 21:50:28 +03:00
Ville Skyttä
057b9be9d8 fix: relative path to pyenv-realpath.dylib (#378) 2022-10-10 21:48:29 +03:00
Joseph Egan
7932bb4cc0 Stop delete force failing when virtualenv does not exist (#330) 2022-10-10 21:47:19 +03:00
laggardkernel
a911a2223f Upgrade uninstall hook after pyenv/pyenv#2432 (#438) 2022-10-10 20:34:24 +03:00
Eric N. Vander Weele
c6ff093344 Deduplicate shims in $PATH for the fish shell during initialization (#430)
When a fish login shell is invoked within an existing login shell, avoid
duplicating path to the shims by removing existing occurrences before
prepending.
2022-05-19 19:03:51 +03:00
Nick
cc9d5f168e Update get-pip.py URLs in pyenv-virtualenv (#426) 2022-02-26 09:41:41 +03:00
Alain Kalker
017ea60cd3 Fix another unbound variable error (#424)
* Fix tests failing after #423
2022-01-30 21:14:28 +03:00
Alain Kalker
1ee7ca6346 Fix unbound variable errors when running pyenv activate with set -u (#423) 2022-01-29 20:53:52 +03:00
Ville Skyttä
91609e25f3 perf(sh-activate): avoid a duplicate pyenv-version-name call (#380) 2021-11-14 02:30:56 +03:00
Seonghyeon Cho
5509c25ac1 Add (y/N) prompt help text (#404) 2021-11-08 18:15:23 +03:00
jivanf
c3110d874e Fix get-pip.py URLs for older versions of Python (#403) 2021-11-08 18:14:47 +03:00
native-api
f95d6a9bee Create FUNDING.yml 2021-10-08 11:55:00 +03:00
native-api
afa008ec95 Update ISSUE_TEMPLATE.md 2021-10-08 11:15:55 +03:00
native-api
6fa056912b Create no-response.yml 2021-10-05 04:40:56 +03:00
native-api
2648a4af29 Update ISSUE_TEMPLATE.md 2021-10-05 01:30:31 +03:00
native-api
ce08a8ee72 Create ISSUE_TEMPLATE.md 2021-10-05 01:29:37 +03:00
Anton Petrov
29fb3c7cd1 Merge pull request #388 from native-api/patch-1
Fix installation steps to allow for Pyenv 2
2021-07-25 12:13:35 +03:00
Anton Petrov
c537bfff26 Merge pull request #395 from Gauravtalreja1/fix-394
Fixes #394 - update pyenv virtualenvs to list virtualenvs start with dot prefixes
2021-06-17 20:35:52 +03:00
Gaurav Talreja
b334dde5ef Fix #394 - update pyenv virtualenvs command to list virtualenvs starting with dot prefixes 2021-06-16 15:20:14 +05:30
native-api
582b693c11 Fix installation steps to allow for Pyenv 2
The text included info on Pyenv startup which is now outdated and incorrect.

Closes https://github.com/pyenv/pyenv/issues/1947, https://github.com/pyenv/pyenv-virtualenv/issues/387
2021-05-26 00:49:31 +03:00
Anton Petrov
6742d0ef10 Merge pull request #384 from native-api/profile_2_rc
~/.*rc should be modified instead of ~/.*profile
2021-05-09 20:56:31 +03:00
Anton Petrov
8c7ef734f9 Update pyenv-virtualenv-init
https://github.com/pyenv/pyenv-installer/pull/109
2021-05-09 20:17:17 +03:00
Ivan Pozdeev
90f7b999ff ~/.*rc should be modified instead of ~/.*profile
Otherwise, there's no effect for non-login interactive shells
2021-05-09 20:16:35 +03:00
Yamashita, Yuu
294f64f76b v1.1.5 2019-02-13 15:27:07 +00:00
Yamashita, Yuu
e39b112676 Install libexec as well under the given prefix (#290, #302) 2019-02-13 15:25:00 +00:00
Yamashita, Yuu
74bba45b9c v1.1.4 2019-02-08 02:04:46 +00:00
Yamashita, Yuu
2d947be5d9 Merge pull request #296 from pyenv/yy-py-venv-major-minor
Prefer `python3.x` executable if available
2019-01-12 14:41:57 +09:00
Yamashita, Yuu
a9e1891e8b Prefer python3.x executable if avaialble (closes #206, #282) 2019-01-12 05:38:21 +00:00
Yamashita, Yuu
bfdeb31d78 Merge pull request #238 from pgrzesik/master
Add other way of deleting existing virtualenv
2019-01-12 07:51:41 +09:00
Yamashita, Yuu
e3203f795a Merge pull request #286 from faho/patch-1
Improve fish installation instructions
2019-01-12 07:50:52 +09:00
Yamashita, Yuu
6d90f61726 Merge pull request #290 from lmmarsano/fix-conda
Fix: support newer conda
2018-11-23 21:57:29 +09:00
Luis Marsano
ed779fea14 cleanup pyenv virtualenv on ERR
also cleanup compatibility paths
2018-11-21 22:00:57 -05:00
Luis Marsano
e0a1e9b35c support newer conda
pyenv-virtualenvs could not list conda environments & pyenv shell would only activate the base conda environment
the conda detection criteria of testing the presence of `conda` or `activate` files under `$(pyenv root)/versions/$version/bin` appears to be the culprit, since newer environments no longer include these files: those files reside in the base conda environment
- add detection criteria of `$(pyenv root)/versions/$version/conda-meta`
- compute the real prefix to the base environment from `realpath $(realpath $(pyenv root)/versions/$version)/../..`
- to allow that, enhance substitute `realpath` in `pyenv-virtualenvs` to reduce relative paths `.` & `..`, and factor that code out to a file under `libexec` for reuse
- hook `which` to locate conda from the real prefix
2018-11-21 22:00:56 -05:00
Fabian Homborg
cec39359ec Improve fish installation instructions
`psub` here is entirely unnecessary.
2018-10-31 13:22:46 +01:00
Yamashita, Yuu
8c9f7fa766 Merge pull request #285 from alanyee/master
Update README.md
2018-10-30 14:49:25 +09:00
Alan Yee
be6d917f16 Update README.md
-Replace Mac OS X with macOS
-Added links
2018-10-29 21:54:24 -07:00
Yamashita, Yuu
32718e80b9 Merge pull request #280 from bradleyhurley/master
Updating ReadMe to include information for Fish
2018-08-22 09:07:37 +09:00
Brad Hurley
8310e73b43 Updating ReadMe to include information for Fish 2018-08-21 12:04:51 -04:00
Yamashita, Yuu
5d1dcaa94c Merge pull request #272 from YumaInaura/master
update README about PYENV_VIRTUALENV_VERBOSE_ACTIVATE
2018-07-06 07:49:39 +09:00
Yuma Inaura (稲浦悠馬)
aa9baa8e03 update README about PYENV_VIRTUALENV_VERBOSE_ACTIVATE 2018-07-06 07:31:34 +09:00
Yamashita, Yuu
75e84742db Update change log [ci skip] 2018-05-24 12:33:57 +00:00
Yamashita, Yuu
829dd1c9cb Updated .travis.yml [ci skip] 2018-05-24 12:33:27 +00:00
Piotr Grzesik
a0b17033fc Add other way of deleting existing virtualenv 2017-10-16 22:08:34 +02:00
32 changed files with 853 additions and 241 deletions

12
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,12 @@
# These are supported funding model platforms
github: [pyenv] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: pyenv # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

33
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,33 @@
Too many issues will kill our team's development velocity, drastically.
Make sure you have checked all steps below.
### Prerequisite
* [ ] Make sure your problem is not listed in [the common build problems](https://github.com/pyenv/pyenv/wiki/Common-build-problems).
* [ ] Make sure no duplicated issue has already been reported in [the pyenv-virtualenv issues](https://github.com/pyenv/pyenv-virtualenv/issues). You should look in closed issues, too.
* [ ] Make sure you are not asking us to help solving your specific issue.
* GitHub issues is opened mainly for development purposes. If you want to ask someone to help solving your problem, go to some community site like [Gitter](https://gitter.im/yyuu/pyenv), [StackOverflow](https://stackoverflow.com/questions/tagged/pyenv), etc.
* [ ] Make sure your problem is not derived from packaging (e.g. [Homebrew](https://brew.sh)).
* Please refer to the package documentation for the installation issues, etc.
* [ ] Make sure your problem is not derived from other plugins.
* This repository is maintaining the `pyenv-virtualenv` plugin only. Please refrain from reporting issues of other plugins here.
### Description
- [ ] Platform information (e.g. Ubuntu Linux 20.04):
- [ ] OS architecture (e.g. amd64):
- [ ] pyenv version:
- [ ] pyenv-virtualenv version:
- [ ] Python version:
- [ ] virtualenv version (if installed):
- [ ] Please attach the debug log of a faulty Pyenv invocation as a gist
* If the problem happens in a Pyenv invocation, you can turn on debug logging by setting `PYENV_DEBUG=1`, e.g. `env PYENV_DEBUG=1 pyenv install -v 3.6.4`
* If the problem happens outside of a Pyenv invocation, get the debug log like this:
```
# for Bash
export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
# for Zsh
export PS4='+(%x:%I): %N(%i): '
set -x
<reproduce the problem>
set +x
```

13
.github/no-response.yml vendored Normal file
View File

@@ -0,0 +1,13 @@
# Configuration for probot-no-response - https://github.com/probot/no-response
# Number of days of inactivity before an Issue is closed for lack of response
daysUntilClose: 30
# Label requiring a response
responseRequiredLabel: need-feedback
# Comment to post when closing an Issue for lack of response. Set to `false` to disable
closeComment: >
This issue has been automatically closed because there has been no response
to our request for more information from the original author. With only the
information that is currently in the issue, we don't have enough information
to take action. Please reach out if you have or find the answers we need so
that we can investigate further.

37
.github/workflows/tests.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
name: tests
on: [pull_request, push]
jobs:
tests:
strategy:
fail-fast: false
matrix:
os:
- ubuntu-22.04
- ubuntu-20.04
- macos-12
- macos-11
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
# Normally, we would use the superbly maintained...
# - uses: actions/setup-python@v2
# with:
# python-version: ${{ matrix.python-version }}
# ... but in the repo, we want to test pyenv builds on Ubuntu
# - run: |
# sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
# libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
# xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
# https://github.com/pyenv/pyenv#installation
#- env:
# PYENV_ROOT: /home/runner/work/pyenv/pyenv
# run: |
# echo $PYENV_ROOT
# echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH
# macos-11 Github Actions env has an old `readlink` and lacks `greadlink` which causes Bats to break
- run: |
if [[ $RUNNER_OS == "macOS" ]] && [[ $(sw_vers -productVersion | awk -F. '{print $1}') -lt 12 ]]; then
brew install coreutils
fi
- run: git clone https://github.com/bats-core/bats-core.git --depth=1 -b v1.2.0 bats
- run: bats/bin/bats --tap test

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
/bats/
/libexec/pyenv-virtualenv/*/*.class /libexec/pyenv-virtualenv/*/*.class
/libexec/pyenv-virtualenv/*/*.pyc /libexec/pyenv-virtualenv/*/*.pyc
/libexec/pyenv-virtualenv/*/*.pyo /libexec/pyenv-virtualenv/*/*.pyo

View File

@@ -1,5 +1,5 @@
sudo: false sudo: false
install: git clone https://github.com/sstephenson/bats.git install: git clone --depth=1 https://github.com/sstephenson/bats.git
script: bats/bin/bats --tap test script: bats/bin/bats --tap test
language: c language: c
notifications: notifications:
@@ -10,4 +10,5 @@ deploy:
api_key: api_key:
secure: DsGAt0UmTSGVfsNJ6LmM+LvsV6FYmvX4FcET82XrskPiQW+N8+8JZR8WuZxfmwdJZu+dkkdoq6gYgL2xF7m4LxRG7aw3B5TtbMTrJQeW0hdtCSBwbbYyvwcp2m7ywE8lGAfZQITaGj1R6f2Cgh8cgtcrErjcF0KJsYlVlgNv+/M= secure: DsGAt0UmTSGVfsNJ6LmM+LvsV6FYmvX4FcET82XrskPiQW+N8+8JZR8WuZxfmwdJZu+dkkdoq6gYgL2xF7m4LxRG7aw3B5TtbMTrJQeW0hdtCSBwbbYyvwcp2m7ywE8lGAfZQITaGj1R6f2Cgh8cgtcrErjcF0KJsYlVlgNv+/M=
on: on:
repo: pyenv/pyenv-virtualenv
tags: true tags: true

View File

@@ -1,5 +1,18 @@
## Version History ## Version History
#### 1.1.5
* Fix install script (#290, #302)
#### 1.1.4
* Support newer conda (#290)
* Prefer `python3.x` executable if available (#206, #282, #296)
#### 1.1.3
* No code changes since 1.1.2
#### 1.1.2 #### 1.1.2
* Use custom get-pip URL based on the target version (#253, #254, #255) * Use custom get-pip URL based on the target version (#253, #254, #255)

View File

@@ -34,21 +34,25 @@ From inside that directory you can:
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv $ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
``` ```
For the Fish shell:
```sh
$ git clone https://github.com/pyenv/pyenv-virtualenv.git (pyenv root)/plugins/pyenv-virtualenv
```
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. 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 ```sh
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
``` ```
**Fish shell note**: Add this to your `~/.config/fish/config.fish` **Fish shell note**: Add this to your `~/.config/fish/config.fish`
```sh ```sh
status --is-interactive; and source (pyenv virtualenv-init -|psub) status --is-interactive; and pyenv virtualenv-init - | source
``` ```
**Zsh note**: Modify your `~/.zshenv` file instead of `~/.bash_profile`. **Zsh note**: Modify your `~/.zshrc` file instead of `~/.bashrc`.
**Pyenv note**: You may also need to add `eval "$(pyenv init -)"` to your profile if you haven't done so already.
3. **Restart your shell to enable pyenv-virtualenv** 3. **Restart your shell to enable pyenv-virtualenv**
@@ -57,10 +61,10 @@ From inside that directory you can:
``` ```
### Installing with Homebrew (for OS X users) ### Installing with Homebrew (for macOS users)
Mac OS X users can install pyenv-virtualenv with the macOS users can install pyenv-virtualenv with the
[Homebrew](http://brew.sh) package manager. [Homebrew](https://brew.sh) package manager.
This will give you access to the `pyenv-virtualenv` command. If you have pyenv This will give you access to the `pyenv-virtualenv` command. If you have pyenv
installed, you will also be able to use the `pyenv virtualenv` command. installed, you will also be able to use the `pyenv virtualenv` command.
@@ -77,12 +81,13 @@ Or, if you would like to install the latest development release:
$ brew install --HEAD pyenv-virtualenv $ brew install --HEAD pyenv-virtualenv
``` ```
After installation, you'll still need to add After installation, you'll still need to do
[Pyenv shell setup steps](https://github.com/pyenv/pyenv#basic-github-checkout)
then add
```sh ```sh
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)" eval "$(pyenv virtualenv-init -)"
``` ```
to your profile (as stated in the caveats). You'll only ever have to do this once. to your shell's `.rc` file (as stated in the caveats). You'll only ever have to do this once.
## Usage ## Usage
@@ -100,6 +105,9 @@ $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
will create a virtualenv based on Python 2.7.10 under `$(pyenv root)/versions` in a will create a virtualenv based on Python 2.7.10 under `$(pyenv root)/versions` in a
folder called `my-virtual-env-2.7.10`. folder called `my-virtual-env-2.7.10`.
`pyenv virtualenv` forwards any options to the underlying command that actually
creates the virtual environment (`conda`, `virtualenv`, or `python -m venv`).
See the output of `pyenv virtualenv --help` for details.
### Create virtualenv from current version ### Create virtualenv from current version
@@ -154,6 +162,12 @@ Removing the directories in `$(pyenv root)/versions` and `$(pyenv root)/versions
pyenv uninstall my-virtual-env pyenv uninstall my-virtual-env
``` ```
You can also delete existing virtualenvs by using `virtualenv-delete` command, e.g. you can run:
```sh
pyenv virtualenv-delete my-virtual-env
```
This will delete virtualenv called `my-virtual-env`.
### virtualenv and venv ### virtualenv and venv
@@ -228,7 +242,8 @@ You can set certain environment variables to control pyenv-virtualenv.
`virtualenv`, download `get_pip.py` from the specified URL. `virtualenv`, download `get_pip.py` from the specified URL.
* `PIP_VERSION`, if set and `venv` 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.
* `PYENV_VIRTUALENV_VERBOSE_ACTIVATE`, if set, shows some verbose outputs on activation and deactivation
* `PYENV_VIRTUALENV_PROMPT`, if set, allows users to customize how `pyenv-virtualenv` modifies their shell prompt. The default prompt ("(venv)") is overwritten with any user-specified text. Specify the location of the virtual environment name with the string `{venv}`. For example, the default prompt string would be `({venv})`.
## Version History ## Version History
@@ -237,7 +252,7 @@ See [CHANGELOG.md](CHANGELOG.md).
### License ### License
(The MIT License) [(The MIT License)](LICENSE)
* Copyright (c) 2015 Yamashita, Yuu * Copyright (c) 2015 Yamashita, Yuu

View File

@@ -25,6 +25,27 @@ resolve_link() {
unset FORCE unset FORCE
unset QUIET unset QUIET
# Define `before_activate` and `after_activate` functions that allow
# plugin hooks to register a string of code for execution before or
# after activating a virtualenv.
declare -a before_hooks after_hooks
before_activate() {
local hook="$1"
before_hooks["${#before_hooks[@]}"]="$hook"
}
after_activate() {
local hook="$1"
after_hooks["${#after_hooks[@]}"]="$hook"
}
# Load plugin hooks.
OLDIFS="$IFS"
IFS=$'\n' scripts=(`pyenv-hooks activate`)
IFS="$OLDIFS"
for script in "${scripts[@]}"; do source "$script"; done
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
"--complete" ) "--complete" )
@@ -52,13 +73,18 @@ while [ $# -gt 0 ]; do
shift 1 shift 1
done done
get_current_versions() {
local IFS=:
current_versions=($(pyenv-version-name 2>/dev/null))
}
no_shell= no_shell=
versions=("$@") versions=("$@")
current_versions=()
if [ -z "${versions}" ]; then if [ -z "${versions}" ]; then
no_shell=1 no_shell=1
OLDIFS="$IFS" get_current_versions
IFS=: versions=($(pyenv-version-name 2>/dev/null)) versions=("${current_versions[@]}")
IFS="$OLDIFS"
fi fi
if [ -z "${PYENV_VIRTUALENV_INIT}" ]; then if [ -z "${PYENV_VIRTUALENV_INIT}" ]; then
@@ -84,9 +110,7 @@ fi
if ! pyenv-virtualenv-prefix "${venv}" 1>/dev/null 2>&1; then if ! pyenv-virtualenv-prefix "${venv}" 1>/dev/null 2>&1; then
# fallback to virtualenv of current version # fallback to virtualenv of current version
OLDIFS="$IFS" [ -n "${current_versions}" ] || get_current_versions
IFS=: current_versions=($(pyenv-version-name))
IFS="$OLDIFS"
new_venv="${current_versions%/envs/*}/envs/${venv}" new_venv="${current_versions%/envs/*}/envs/${venv}"
if pyenv-virtualenv-prefix "${new_venv}" 1>/dev/null 2>&1; then if pyenv-virtualenv-prefix "${new_venv}" 1>/dev/null 2>&1; then
venv="${new_venv}" venv="${new_venv}"
@@ -134,6 +158,9 @@ fi
pyenv-sh-deactivate --force --quiet || true pyenv-sh-deactivate --force --quiet || true
# Execute `before_activate` hooks.
for hook in "${before_hooks[@]}"; do eval "$hook"; done
if [ -n "$PYENV_VIRTUALENV_VERBOSE_ACTIVATE" ]; then if [ -n "$PYENV_VIRTUALENV_VERBOSE_ACTIVATE" ]; then
echo "pyenv-virtualenv: activate ${venv}" 1>&2 echo "pyenv-virtualenv: activate ${venv}" 1>&2
fi fi
@@ -177,7 +204,8 @@ EOS
esac esac
# anaconda/miniconda # anaconda/miniconda
if [ -x "${prefix}/bin/conda" ]; then if [ -d "${prefix}/conda-meta" ] ||
[ -x "${prefix}/bin/conda" ]; then
if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then
CONDA_DEFAULT_ENV="${venv##*/envs/}" CONDA_DEFAULT_ENV="${venv##*/envs/}"
else else
@@ -217,23 +245,39 @@ if [ -z "${PYENV_VIRTUALENV_DISABLE_PROMPT}" ]; then
case "${shell}" in case "${shell}" in
fish ) fish )
if [ -z "${QUIET}" ]; then if [ -z "${QUIET}" ]; then
echo "pyenv-virtualenv: prompt changing not working for fish." 1>&2 cat <<EOS
functions -e _pyenv_old_prompt # remove old prompt function if exists.
# since everything is in memory, it's safe to
# remove it.
functions -c fish_prompt _pyenv_old_prompt # backup old prompt function
# from python-venv
function fish_prompt
set -l prompt (_pyenv_old_prompt) # call old prompt function first since it might
# read exit status
echo -n "(${venv}) " # add virtualenv to prompt
string join -- \n \$prompt # handle multiline prompts
end
EOS
fi fi
;; ;;
* ) * )
if [ -z "${QUIET}" ]; then if [ -z "${PYENV_VIRTUALENV_PROMPT}" ]; 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 PYENV_VIRTUALENV_PROMPT="(${venv})"
else
PYENV_VIRTUALENV_PROMPT="${PYENV_VIRTUALENV_PROMPT/\{venv\}/${venv}}"
fi fi
cat <<EOS cat <<EOS
export _OLD_VIRTUAL_PS1="\${PS1}"; export _OLD_VIRTUAL_PS1="\${PS1:-}";
export PS1="(${venv}) \${PS1}"; export PS1="${PYENV_VIRTUALENV_PROMPT} \${PS1:-}";
EOS EOS
;; ;;
esac esac
fi fi
# conda package anaconda/miniconda scripts (#173) # conda package anaconda/miniconda scripts (#173)
if [ -x "${prefix}/bin/conda" ]; then if [ -d "${prefix}/conda-meta" ] ||
[ -x "${prefix}/bin/conda" ]; then
shopt -s nullglob shopt -s nullglob
case "${shell}" in case "${shell}" in
fish ) fish )
@@ -256,3 +300,6 @@ if [ -x "${prefix}/bin/conda" ]; then
esac esac
shopt -u nullglob shopt -u nullglob
fi fi
# Execute `after_activate` hooks.
for hook in "${after_hooks[@]}"; do eval "$hook"; done

View File

@@ -16,6 +16,27 @@ fi
unset FORCE unset FORCE
unset QUIET unset QUIET
# Define `before_deactivate` and `after_deactivate` functions that allow
# plugin hooks to register a string of code for execution before or
# after deactivating a virtualenv.
declare -a before_hooks after_hooks
before_deactivate() {
local hook="$1"
before_hooks["${#before_hooks[@]}"]="$hook"
}
after_deactivate() {
local hook="$1"
after_hooks["${#after_hooks[@]}"]="$hook"
}
# Load plugin hooks.
OLDIFS="$IFS"
IFS=$'\n' scripts=(`pyenv-hooks deactivate`)
IFS="$OLDIFS"
for script in "${scripts[@]}"; do source "$script"; done
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
"-f" | "--force" ) "-f" | "--force" )
@@ -54,12 +75,16 @@ else
venv="${prefix##*/}" venv="${prefix##*/}"
fi fi
# Execute `before_deactivate` hooks.
for hook in "${before_hooks[@]}"; do eval "$hook"; done
if [ -n "$PYENV_VIRTUALENV_VERBOSE_ACTIVATE" ]; then if [ -n "$PYENV_VIRTUALENV_VERBOSE_ACTIVATE" ]; then
echo "pyenv-virtualenv: deactivate ${venv}" 1>&2 echo "pyenv-virtualenv: deactivate ${venv}" 1>&2
fi fi
# conda package anaconda/miniconda scripts (#173) # conda package anaconda/miniconda scripts (#173)
if [ -x "${prefix}/bin/conda" ]; then if [ -d "${prefix}/conda-meta" ] ||
[ -x "${prefix}/bin/conda" ]; then
shopt -s nullglob shopt -s nullglob
case "${shell}" in case "${shell}" in
fish ) fish )
@@ -133,7 +158,7 @@ EOS
;; ;;
* ) * )
cat <<EOS cat <<EOS
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then if [ -n "\${_OLD_VIRTUAL_PATH:-}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}"; export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PATH;
fi; fi;
@@ -152,7 +177,7 @@ EOS
;; ;;
* ) * )
cat <<EOS cat <<EOS
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then if [ -n "\${_OLD_VIRTUAL_PYTHONHOME:-}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}"; export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME; unset _OLD_VIRTUAL_PYTHONHOME;
fi; fi;
@@ -162,11 +187,19 @@ esac
case "${shell}" in case "${shell}" in
fish ) fish )
: cat <<EOS
# check if old prompt function exists
if functions -q _pyenv_old_prompt
# remove old prompt function if exists.
functions -e fish_prompt
functions -c _pyenv_old_prompt fish_prompt
functions -e _pyenv_old_prompt
end
EOS
;; ;;
* ) * )
cat <<EOS cat <<EOS
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then if [ -n "\${_OLD_VIRTUAL_PS1:-}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}"; export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1; unset _OLD_VIRTUAL_PS1;
fi; fi;
@@ -190,3 +223,6 @@ fi;
EOS EOS
;; ;;
esac esac
# Execute `after_deactivate` hooks.
for hook in "${after_hooks[@]}"; do eval "$hook"; done

View File

@@ -6,10 +6,14 @@
# pyenv virtualenv --version # pyenv virtualenv --version
# pyenv virtualenv --help # pyenv virtualenv --help
# #
# -f/--force Install even if the version appears to be installed already # -f/--force Install even if the version appears to be installed already. Skip
# prompting for confirmation
#
# Notable VIRTUALENV_OPTIONS passed to venv-creating executable, if applicable:
# -u/--upgrade Imply --force
# #
PYENV_VIRTUALENV_VERSION="1.1.3" PYENV_VIRTUALENV_VERSION="1.2.2"
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
@@ -50,6 +54,12 @@ parse_options() {
done done
} }
colorize() {
if [ -t 1 ]; then printf "\e[%sm%s\e[m" "$1" "$2"
else echo -n "$2"
fi
}
resolve_link() { resolve_link() {
$(type -p greadlink readlink | head -1) "$1" $(type -p greadlink readlink | head -1) "$1"
} }
@@ -101,6 +111,10 @@ http_get_wget() {
} }
version() { version() {
if [[ -z "${PYENV_VERSION:-}" ]]; then
# `PYENV_VERSION` might not be declared if this was invoked via `--version`
export PYENV_VERSION="$(pyenv-version-name)"
fi
detect_venv detect_venv
local version local version
if [ -n "${USE_CONDA}" ]; then if [ -n "${USE_CONDA}" ]; then
@@ -108,7 +122,7 @@ version() {
echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (conda ${version:-unknown})" echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (conda ${version:-unknown})"
else else
if [ -n "$USE_M_VENV" ]; then if [ -n "$USE_M_VENV" ]; then
echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (python -m venv)" echo "pyenv-virtualenv ${PYENV_VIRTUALENV_VERSION} (${M_VENV_PYTHON_BIN:-python} -m venv)"
else else
version="$(pyenv-exec virtualenv --version 2>/dev/null || true)" 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})"
@@ -123,7 +137,7 @@ usage() {
pyenv-exec conda create --help 2>/dev/null || true pyenv-exec conda create --help 2>/dev/null || true
else else
if [ -n "${USE_M_VENV}" ]; then if [ -n "${USE_M_VENV}" ]; then
pyenv-exec python -m venv --help 2>/dev/null || true pyenv-exec "${M_VENV_PYTHON_BIN:-python}" -m venv --help 2>/dev/null || true
else else
pyenv-exec virtualenv --help 2>/dev/null || true pyenv-exec virtualenv --help 2>/dev/null || true
fi fi
@@ -141,9 +155,15 @@ detect_venv() {
if [ -x "${prefix}/bin/virtualenv" ]; then if [ -x "${prefix}/bin/virtualenv" ]; then
HAS_VIRTUALENV=1 HAS_VIRTUALENV=1
fi fi
if pyenv-exec python -m venv --help 1>/dev/null 2>&1; then # Prefer `python3.x` executable if available (#206, #282)
local python
for python in "python${PYENV_VERSION%.*}" "python${PYENV_VERSION%%.*}" "python"; do
if pyenv-exec "${python}" -m venv --help 1>/dev/null 2>&1; then
HAS_M_VENV=1 HAS_M_VENV=1
M_VENV_PYTHON_BIN="${python}"
break
fi fi
done
fi fi
# Use `python -m venv` only if there is venv available, virtualenv is not installed, and `-p` not given # Use `python -m venv` only if there is venv available, virtualenv is not installed, and `-p` not given
if [ -n "${HAS_CONDA}" ]; then if [ -n "${HAS_CONDA}" ]; then
@@ -296,6 +316,10 @@ else
VIRTUALENV_NAME="${ARGUMENTS[1]}" VIRTUALENV_NAME="${ARGUMENTS[1]}"
fi fi
if [[ -n "${VERSION_NAME}" ]] && command -v pyenv-latest >/dev/null; then
VERSION_NAME="$(pyenv-latest -q "${VERSION_NAME}" || echo "${VERSION_NAME}")"
fi
if [ -z "${VERSION_NAME}" ] || [ -z "${VIRTUALENV_NAME}" ]; then if [ -z "${VERSION_NAME}" ] || [ -z "${VIRTUALENV_NAME}" ]; then
usage 1 usage 1
fi fi
@@ -318,10 +342,20 @@ 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}"
not_installed_message() {
local is_available=$(python-build --definitions | grep -F -x "$1")
echo "pyenv-virtualenv: \`${1}' is not installed in pyenv." 1>&2
if [[ $is_available ]]; then
echo "Run \`pyenv install ${1}' to install it." 1>&2
else
echo "It does not look like a valid Python version. See \`pyenv install --list' for available versions." 1>&2
fi
}
# Source version must exist before creating virtualenv. # Source version must exist before creating virtualenv.
PREFIX="$(pyenv-prefix 2>/dev/null || true)" PREFIX="$(pyenv-prefix 2>/dev/null || true)"
if [ ! -d "${PREFIX}" ]; then if [ ! -d "${PREFIX}" ]; then
echo "pyenv-virtualenv: \`${PYENV_VERSION}' is not installed in pyenv." 1>&2 not_installed_message "${PYENV_VERSION}"
exit 1 exit 1
fi fi
@@ -423,7 +457,8 @@ else
if [ -x "${python}" ]; then if [ -x "${python}" ]; then
VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--python=${python}" VIRTUALENV_OPTIONS[${#VIRTUALENV_OPTIONS[*]}]="--python=${python}"
else else
echo "pyenv-virtualenv: \`${VIRTUALENV_PYTHON##*/}' is not installed in pyenv." 1>&2 # echo "pyenv-virtualenv: \`${VIRTUALENV_PYTHON##*/}' is not installed in pyenv." 1>&2
not_installed_message "${VIRTUALENV_PYTHON##*/}"
exit 1 exit 1
fi fi
fi fi
@@ -469,16 +504,28 @@ if [ -z "${GET_PIP_URL}" ]; then
# Use custom get-pip URL based on the target version (#1127) # Use custom get-pip URL based on the target version (#1127)
case "${PYENV_VERSION}" in case "${PYENV_VERSION}" in
2.6 | 2.6.* ) 2.6 | 2.6.* )
GET_PIP_URL="https://bootstrap.pypa.io/2.6/get-pip.py" GET_PIP_URL="https://bootstrap.pypa.io/pip/2.6/get-pip.py"
;;
2.7 | 2.7.* )
GET_PIP_URL="https://bootstrap.pypa.io/pip/2.7/get-pip.py"
;; ;;
3.2 | 3.2.* ) 3.2 | 3.2.* )
GET_PIP_URL="https://bootstrap.pypa.io/3.2/get-pip.py" GET_PIP_URL="https://bootstrap.pypa.io/pip/3.2/get-pip.py"
;; ;;
3.3 | 3.3.* ) 3.3 | 3.3.* )
GET_PIP_URL="https://bootstrap.pypa.io/3.3/get-pip.py" GET_PIP_URL="https://bootstrap.pypa.io/pip/3.3/get-pip.py"
;;
3.4 | 3.4.* )
GET_PIP_URL="https://bootstrap.pypa.io/pip/3.4/get-pip.py"
;;
3.5 | 3.5.* )
GET_PIP_URL="https://bootstrap.pypa.io/pip/3.5/get-pip.py"
;;
3.6 | 3.6.* )
GET_PIP_URL="https://bootstrap.pypa.io/pip/3.6/get-pip.py"
;; ;;
* ) * )
GET_PIP_URL="https://bootstrap.pypa.io/get-pip.py" GET_PIP_URL="https://bootstrap.pypa.io/pip/get-pip.py"
;; ;;
esac esac
fi fi
@@ -537,10 +584,11 @@ for hook in "${before_hooks[@]}"; do eval "$hook"; done
# Plan cleanup on unsuccessful installation. # Plan cleanup on unsuccessful installation.
cleanup() { cleanup() {
[[ -L "${COMPAT_VIRTUALENV_PATH}" ]] && rm "${COMPAT_VIRTUALENV_PATH}"
[ -z "${PREFIX_EXISTS}" ] && rm -rf "$VIRTUALENV_PATH" [ -z "${PREFIX_EXISTS}" ] && rm -rf "$VIRTUALENV_PATH"
} }
trap cleanup SIGINT trap cleanup SIGINT ERR
# Invoke virtualenv and record exit status in $STATUS. # Invoke virtualenv and record exit status in $STATUS.
STATUS=0 STATUS=0
@@ -552,12 +600,21 @@ if [ -n "${USE_CONDA}" ]; then
pyenv-exec conda create $QUIET $VERBOSE --name "${VIRTUALENV_PATH##*/}" --yes "${VIRTUALENV_OPTIONS[@]}" python || STATUS="$?" pyenv-exec conda create $QUIET $VERBOSE --name "${VIRTUALENV_PATH##*/}" --yes "${VIRTUALENV_OPTIONS[@]}" python || STATUS="$?"
else else
if [ -n "${USE_M_VENV}" ]; then if [ -n "${USE_M_VENV}" ]; then
pyenv-exec python -m venv $QUIET $VERBOSE "${VIRTUALENV_OPTIONS[@]}" "${VIRTUALENV_PATH}" || STATUS="$?" pyenv-exec "${M_VENV_PYTHON_BIN:-python}" -m venv $QUIET $VERBOSE "${VIRTUALENV_OPTIONS[@]}" "${VIRTUALENV_PATH}" || STATUS="$?"
else else
pyenv-exec virtualenv $QUIET $VERBOSE "${VIRTUALENV_OPTIONS[@]}" "${VIRTUALENV_PATH}" || STATUS="$?" pyenv-exec virtualenv $QUIET $VERBOSE "${VIRTUALENV_OPTIONS[@]}" "${VIRTUALENV_PATH}" || STATUS="$?"
fi fi
fi fi
(
shopt -s nullglob
for extra_binary in "$PREFIX"/bin/python*-config; do
extra_binary_linkname="$VIRTUALENV_PATH/bin/$(basename $extra_binary)"
[[ -e "$extra_binary_linkname" ]] || \
ln -s "$extra_binary" "$extra_binary_linkname"
done
)
## Create symlink in the `versions` directory for backward compatibility ## Create symlink in the `versions` directory for backward compatibility
if [ -d "${VIRTUALENV_PATH}" ] && [ -n "${COMPAT_VIRTUALENV_PATH}" ]; then if [ -d "${VIRTUALENV_PATH}" ] && [ -n "${COMPAT_VIRTUALENV_PATH}" ]; then
ln -fs "${VIRTUALENV_PATH}" "${COMPAT_VIRTUALENV_PATH}" ln -fs "${VIRTUALENV_PATH}" "${COMPAT_VIRTUALENV_PATH}"

View File

@@ -75,7 +75,7 @@ else
if pyenv-virtualenv-prefix "${VERSION_NAME}" 1>/dev/null 2>&1; then if pyenv-virtualenv-prefix "${VERSION_NAME}" 1>/dev/null 2>&1; then
PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}" PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}"
unset COMPAT_PREFIX unset COMPAT_PREFIX
else elif [ -z "$FORCE" ]; then
echo "pyenv-virtualenv: \`${DEFINITION}' is not a virtualenv." 1>&2 echo "pyenv-virtualenv: \`${DEFINITION}' is not a virtualenv." 1>&2
exit 1 exit 1
fi fi
@@ -88,7 +88,7 @@ if [ -z "$FORCE" ]; then
exit 1 exit 1
fi fi
read -p "pyenv-virtualenv: remove $PREFIX? " read -p "pyenv-virtualenv: remove $PREFIX? (y/N) "
case "$REPLY" in case "$REPLY" in
y* | Y* ) ;; y* | Y* ) ;;
* ) exit 1 ;; * ) exit 1 ;;

View File

@@ -45,12 +45,13 @@ if [ -z "$shell" ]; then
shell="${shell%% *}" shell="${shell%% *}"
shell="${shell:-$SHELL}" shell="${shell:-$SHELL}"
shell="${shell##*/}" shell="${shell##*/}"
shell="${shell%%-*}"
fi fi
if [ -z "$print" ]; then if [ -z "$print" ]; then
case "$shell" in case "$shell" in
bash ) bash )
profile='~/.bash_profile' profile='~/.bashrc'
;; ;;
zsh ) zsh )
profile='~/.zshrc' profile='~/.zshrc'
@@ -86,6 +87,8 @@ fi
case "$shell" in case "$shell" in
fish ) fish )
cat <<EOS cat <<EOS
while set index (contains -i -- "${PYENV_VIRTUALENV_ROOT:-${PYENV_VIRTUALENV_INSTALL_PREFIX}}/shims" \$PATH)
set -eg PATH[\$index]; end; set -e index
set -gx PATH '${PYENV_VIRTUALENV_ROOT:-${PYENV_VIRTUALENV_INSTALL_PREFIX}}/shims' \$PATH; set -gx PATH '${PYENV_VIRTUALENV_ROOT:-${PYENV_VIRTUALENV_INSTALL_PREFIX}}/shims' \$PATH;
set -gx PYENV_VIRTUALENV_INIT 1; set -gx PYENV_VIRTUALENV_INIT 1;
EOS EOS
@@ -127,7 +130,7 @@ esac
if [[ "$shell" != "fish" ]]; then if [[ "$shell" != "fish" ]]; then
cat <<EOS cat <<EOS
local ret=\$? local ret=\$?
if [ -n "\$VIRTUAL_ENV" ]; then if [ -n "\${VIRTUAL_ENV-}" ]; then
eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true
else else
eval "\$(pyenv sh-activate --quiet || true)" || true eval "\$(pyenv sh-activate --quiet || true)" || true
@@ -139,8 +142,8 @@ EOS
case "$shell" in case "$shell" in
bash ) bash )
cat <<EOS cat <<EOS
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-}"
fi fi
EOS EOS
;; ;;

View File

@@ -6,6 +6,21 @@
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
if [ -L "${BASH_SOURCE}" ]; then
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 -f "$1"
}
script_path=$(resolve_link ${BASH_SOURCE})
else
script_path=${BASH_SOURCE}
fi
. ${script_path%/*}/../libexec/pyenv-virtualenv-realpath
if [ -z "$PYENV_ROOT" ]; then if [ -z "$PYENV_ROOT" ]; then
PYENV_ROOT="${HOME}/.pyenv" PYENV_ROOT="${HOME}/.pyenv"
@@ -19,6 +34,15 @@ else
IFS=: versions=($(pyenv-version-name)) IFS=: versions=($(pyenv-version-name))
fi fi
append_virtualenv_prefix() {
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
fi
}
VIRTUALENV_PREFIX_PATHS=() VIRTUALENV_PREFIX_PATHS=()
for version in "${versions[@]}"; do for version in "${versions[@]}"; do
if [ "$version" = "system" ]; then if [ "$version" = "system" ]; then
@@ -55,12 +79,11 @@ for version in "${versions[@]}"; do
fi fi
fi fi
fi fi
if [ -d "${VIRTUALENV_PREFIX_PATH}" ]; then append_virtualenv_prefix
VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "${VIRTUALENV_PREFIX_PATH:-${PYENV_PREFIX_PATH}}") elif [ -d "${PYENV_PREFIX_PATH}/conda-meta" ]; then
else # conda
echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2 VIRTUALENV_PREFIX_PATH="$(realpath "${PYENV_PREFIX_PATH}"/../..)"
exit 1 append_virtualenv_prefix
fi
else else
echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2 echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2
exit 1 exit 1

View File

@@ -7,6 +7,21 @@
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
if [ -L "${BASH_SOURCE}" ]; then
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 -f "$1"
}
script_path=$(resolve_link ${BASH_SOURCE})
else
script_path=${BASH_SOURCE}
fi
. ${script_path%/*}/../libexec/pyenv-virtualenv-realpath
if [ -z "$PYENV_ROOT" ]; then if [ -z "$PYENV_ROOT" ]; then
PYENV_ROOT="${HOME}/.pyenv" PYENV_ROOT="${HOME}/.pyenv"
@@ -32,38 +47,6 @@ done
versions_dir="${PYENV_ROOT}/versions" 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 if [ -d "$versions_dir" ]; then
versions_dir="$(realpath "$versions_dir")" versions_dir="$(realpath "$versions_dir")"
fi fi
@@ -107,6 +90,7 @@ print_version() {
num_versions=$((num_versions + 1)) num_versions=$((num_versions + 1))
} }
shopt -s dotglob
shopt -s nullglob shopt -s nullglob
for path in "$versions_dir"/*; do for path in "$versions_dir"/*; do
if [ -d "$path" ]; then if [ -d "$path" ]; then
@@ -127,6 +111,7 @@ for path in "$versions_dir"/*; do
done done
fi fi
done done
shopt -u dotglob
shopt -u nullglob shopt -u nullglob
if [ "$num_versions" -eq 0 ] && [ -n "$include_system" ]; then if [ "$num_versions" -eq 0 ] && [ -n "$include_system" ]; then

View File

@@ -2,11 +2,11 @@ resolve_link() {
$(type -p greadlink readlink | head -1) "$1" $(type -p greadlink readlink | head -1) "$1"
} }
uninstall_related_virtual_env() {
if [ -n "${DEFINITION}" ]; then if [ -n "${DEFINITION}" ]; then
if [[ "${DEFINITION}" != "${DEFINITION%/envs/*}" ]]; then if [[ "${DEFINITION}" != "${DEFINITION%/envs/*}" ]]; then
# Uninstall virtualenv by long name # Uninstall virtualenv by long name
exec pyenv-virtualenv-delete ${FORCE+-f} "${DEFINITION}" pyenv-virtualenv-delete ${FORCE+-f} "${DEFINITION}"
exit 128
else else
VERSION_NAME="${VERSION_NAME:-${DEFINITION##*/}}" VERSION_NAME="${VERSION_NAME:-${DEFINITION##*/}}"
PREFIX="${PREFIX:-${PYENV_ROOT}/versions/${VERSION_NAME}}" PREFIX="${PREFIX:-${PYENV_ROOT}/versions/${VERSION_NAME}}"
@@ -15,8 +15,7 @@ if [ -n "${DEFINITION}" ]; then
REAL_DEFINITION="${REAL_PREFIX#${PYENV_ROOT}/versions/}" REAL_DEFINITION="${REAL_PREFIX#${PYENV_ROOT}/versions/}"
if [[ "${REAL_DEFINITION}" != "${REAL_DEFINITION%/envs/*}" ]]; then if [[ "${REAL_DEFINITION}" != "${REAL_DEFINITION%/envs/*}" ]]; then
# Uninstall virtualenv by short name # Uninstall virtualenv by short name
exec pyenv-virtualenv-delete ${FORCE+-f} "${REAL_DEFINITION}" pyenv-virtualenv-delete ${FORCE+-f} "${REAL_DEFINITION}"
exit 128
fi fi
else else
# Uninstall all virtualenvs inside `envs` directory too # Uninstall all virtualenvs inside `envs` directory too
@@ -28,3 +27,6 @@ if [ -n "${DEFINITION}" ]; then
fi fi
fi fi
fi fi
}
before_uninstall "uninstall_related_virtual_env"

View File

@@ -0,0 +1,11 @@
# newer versions of conda share programs from the real prefix
# this hook tries to find the executable there
if [ ! -x "${PYENV_COMMAND_PATH}" ] && [[ "${PYENV_COMMAND_PATH##*/}" == "conda" ]]; then
if [ -d "${PYENV_ROOT}/versions/${version}/conda-meta" ]; then
conda_command_path="$(pyenv-virtualenv-prefix "$version")"/bin/"${PYENV_COMMAND_PATH##*/}"
if [ -x "${conda_command_path}" ]; then
PYENV_COMMAND_PATH="${conda_command_path}"
fi
fi
fi

View File

@@ -12,14 +12,17 @@ if [ -z "${PREFIX}" ]; then
fi fi
BIN_PATH="${PREFIX}/bin" BIN_PATH="${PREFIX}/bin"
LIBEXEC_PATH="${PREFIX}/libexec"
SHIMS_PATH="${PREFIX}/shims" SHIMS_PATH="${PREFIX}/shims"
HOOKS_PATH="${PREFIX}/etc/pyenv.d" HOOKS_PATH="${PREFIX}/etc/pyenv.d"
mkdir -p "$BIN_PATH" mkdir -p "$BIN_PATH"
mkdir -p "$LIBEXEC_PATH"
mkdir -p "$SHIMS_PATH" mkdir -p "$SHIMS_PATH"
mkdir -p "$HOOKS_PATH" mkdir -p "$HOOKS_PATH"
install -p bin/* "$BIN_PATH" install -p bin/* "$BIN_PATH"
install -p libexec/* "$LIBEXEC_PATH"
install -p shims/* "$SHIMS_PATH" install -p shims/* "$SHIMS_PATH"
for hook in etc/pyenv.d/*; do for hook in etc/pyenv.d/*; do
if [ -d "$hook" ]; then if [ -d "$hook" ]; then

View File

@@ -0,0 +1,50 @@
#!/usr/bin/env bash
# Summary: Substitute realpath if unavailable as a builtin or file
# Usage: . pyenv-virtualenv-realpath
if ! {
enable -f "${BASH_SOURCE%/*}"/../../../libexec/pyenv-realpath.dylib realpath ||
type realpath
} >/dev/null 2>&1; 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 f="$*" \
name dir
[[ $f ]] || {
>&2 echo ${FUNCNAME[0]}: missing operand
return
}
while [[ -L $f ]]; do
f="$(resolve_link "$f")"
done
if [[ ! -d $f ]]; then
name="/${f##*/}"
# parent?
dir="${f%/*}"
if [[ $dir == $f ]]; then
#lacks /: parent is current directory
f="$PWD"
else
f="$dir"
fi
fi
#absolute directory
dir="$(cd "$f"
pwd)"
echo "$dir$name"
}
fi

View File

@@ -15,7 +15,9 @@ setup() {
unset PYENV_VIRTUALENV_DISABLE_PROMPT unset PYENV_VIRTUALENV_DISABLE_PROMPT
unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT
unset VIRTUAL_ENV_DISABLE_PROMPT unset VIRTUAL_ENV_DISABLE_PROMPT
unset PYENV_VIRTUALENV_PROMPT
unset _OLD_VIRTUAL_PS1 unset _OLD_VIRTUAL_PS1
stub pyenv-hooks "activate : echo"
} }
@test "activate virtualenv from current version" { @test "activate virtualenv from current version" {
@@ -33,9 +35,33 @@ setup() {
deactivated deactivated
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export 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 _OLD_VIRTUAL_PS1="\${PS1}"; export PS1="(venv) \${PS1:-}";
export PS1="(venv) \${PS1}"; EOS
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
unstub pyenv-sh-deactivate
}
@test "activate virtualenv from current version with custom prompt" {
export PYENV_VIRTUALENV_INIT=1
stub pyenv-version-name "echo venv"
stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="venv" PYENV_VIRTUALENV_PROMPT='venv:{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";
export _OLD_VIRTUAL_PS1="\${PS1:-}";
export PS1="venv:venv \${PS1:-}";
EOS EOS
unstub pyenv-version-name unstub pyenv-version-name
@@ -59,8 +85,8 @@ EOS
deactivated deactivated
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"; export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export _OLD_VIRTUAL_PS1="\${PS1}"; export _OLD_VIRTUAL_PS1="\${PS1:-}";
export PS1="(venv) \${PS1}"; export PS1="(venv) \${PS1:-}";
EOS EOS
unstub pyenv-version-name unstub pyenv-version-name
@@ -86,9 +112,8 @@ deactivated
pyenv-virtualenv: activate venv pyenv-virtualenv: activate venv
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export 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 _OLD_VIRTUAL_PS1="\${PS1}"; export PS1="(venv) \${PS1:-}";
export PS1="(venv) \${PS1}";
EOS EOS
unstub pyenv-version-name unstub pyenv-version-name
@@ -114,9 +139,8 @@ export PYENV_VERSION="venv";
export PYENV_ACTIVATE_SHELL=1; export PYENV_ACTIVATE_SHELL=1;
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export 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 _OLD_VIRTUAL_PS1="\${PS1}"; export PS1="(venv) \${PS1:-}";
export PS1="(venv) \${PS1}";
EOS EOS
unstub pyenv-version-name unstub pyenv-version-name
@@ -140,7 +164,18 @@ EOS
deactivated deactivated
set -gx PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv"; set -gx PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv";
set -gx VIRTUAL_ENV "${PYENV_ROOT}/versions/venv"; set -gx VIRTUAL_ENV "${PYENV_ROOT}/versions/venv";
pyenv-virtualenv: prompt changing not working for fish. functions -e _pyenv_old_prompt # remove old prompt function if exists.
# since everything is in memory, it's safe to
# remove it.
functions -c fish_prompt _pyenv_old_prompt # backup old prompt function
# from python-venv
function fish_prompt
set -l prompt (_pyenv_old_prompt) # call old prompt function first since it might
# read exit status
echo -n "(venv) " # add virtualenv to prompt
string join -- \n \$prompt # handle multiline prompts
end
EOS EOS
unstub pyenv-version-name unstub pyenv-version-name
@@ -166,7 +201,18 @@ set -gx PYENV_VERSION "venv";
set -gx PYENV_ACTIVATE_SHELL 1; set -gx PYENV_ACTIVATE_SHELL 1;
set -gx PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv"; set -gx PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv";
set -gx VIRTUAL_ENV "${PYENV_ROOT}/versions/venv"; set -gx VIRTUAL_ENV "${PYENV_ROOT}/versions/venv";
pyenv-virtualenv: prompt changing not working for fish. functions -e _pyenv_old_prompt # remove old prompt function if exists.
# since everything is in memory, it's safe to
# remove it.
functions -c fish_prompt _pyenv_old_prompt # backup old prompt function
# from python-venv
function fish_prompt
set -l prompt (_pyenv_old_prompt) # call old prompt function first since it might
# read exit status
echo -n "(venv) " # add virtualenv to prompt
string join -- \n \$prompt # handle multiline prompts
end
EOS EOS
unstub pyenv-version-name unstub pyenv-version-name
@@ -191,9 +237,8 @@ export PYENV_VERSION="venv27";
export PYENV_ACTIVATE_SHELL=1; export PYENV_ACTIVATE_SHELL=1;
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27"; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27";
export 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 _OLD_VIRTUAL_PS1="\${PS1}"; export PS1="(venv27) \${PS1:-}";
export PS1="(venv27) \${PS1}";
EOS EOS
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
@@ -217,9 +262,8 @@ export PYENV_VERSION="venv27";
export PYENV_ACTIVATE_SHELL=1; export PYENV_ACTIVATE_SHELL=1;
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27"; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27";
export 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 _OLD_VIRTUAL_PS1="\${PS1}"; export PS1="(venv27) \${PS1:-}";
export PS1="(venv27) \${PS1}";
EOS EOS
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
@@ -243,7 +287,18 @@ set -gx PYENV_VERSION "venv27";
set -gx PYENV_ACTIVATE_SHELL 1; set -gx PYENV_ACTIVATE_SHELL 1;
set -gx PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27"; set -gx PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27";
set -gx VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27"; set -gx VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27";
pyenv-virtualenv: prompt changing not working for fish. functions -e _pyenv_old_prompt # remove old prompt function if exists.
# since everything is in memory, it's safe to
# remove it.
functions -c fish_prompt _pyenv_old_prompt # backup old prompt function
# from python-venv
function fish_prompt
set -l prompt (_pyenv_old_prompt) # call old prompt function first since it might
# read exit status
echo -n "(venv27) " # add virtualenv to prompt
string join -- \n \$prompt # handle multiline prompts
end
EOS EOS
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
@@ -267,7 +322,18 @@ set -gx PYENV_VERSION "venv27";
set -gx PYENV_ACTIVATE_SHELL 1; set -gx PYENV_ACTIVATE_SHELL 1;
set -gx PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27"; set -gx PYENV_VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27";
set -gx VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27"; set -gx VIRTUAL_ENV "${PYENV_ROOT}/versions/venv27";
pyenv-virtualenv: prompt changing not working for fish. functions -e _pyenv_old_prompt # remove old prompt function if exists.
# since everything is in memory, it's safe to
# remove it.
functions -c fish_prompt _pyenv_old_prompt # backup old prompt function
# from python-venv
function fish_prompt
set -l prompt (_pyenv_old_prompt) # call old prompt function first since it might
# read exit status
echo -n "(venv27) " # add virtualenv to prompt
string join -- \n \$prompt # handle multiline prompts
end
EOS EOS
unstub pyenv-virtualenv-prefix unstub pyenv-virtualenv-prefix
@@ -390,9 +456,8 @@ export PYENV_VERSION="venv27:2.7.10";
export PYENV_ACTIVATE_SHELL=1; export PYENV_ACTIVATE_SHELL=1;
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27"; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv27";
export 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 _OLD_VIRTUAL_PS1="\${PS1}"; export PS1="(venv27) \${PS1:-}";
export PS1="(venv27) \${PS1}";
EOS EOS
unstub pyenv-sh-deactivate unstub pyenv-sh-deactivate

View File

@@ -16,7 +16,13 @@ setup() {
unset PYENV_VIRTUALENV_DISABLE_PROMPT unset PYENV_VIRTUALENV_DISABLE_PROMPT
unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT
unset VIRTUAL_ENV_DISABLE_PROMPT unset VIRTUAL_ENV_DISABLE_PROMPT
unset PYENV_VIRTUALENV_PROMPT
unset _OLD_VIRTUAL_PS1 unset _OLD_VIRTUAL_PS1
stub pyenv-hooks "activate : echo"
}
teardown() {
unstub pyenv-hooks
} }
@test "activate conda root from current version" { @test "activate conda root from current version" {
@@ -36,9 +42,37 @@ deactivated
export PYENV_VIRTUAL_ENV="${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 VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0";
export CONDA_DEFAULT_ENV="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 _OLD_VIRTUAL_PS1="\${PS1}"; export PS1="(anaconda-2.3.0) \${PS1:-}";
export PS1="(anaconda-2.3.0) \${PS1}"; export CONDA_PREFIX="${TMP}/pyenv/versions/anaconda-2.3.0";
EOS
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
unstub pyenv-sh-deactivate
teardown_conda "anaconda-2.3.0"
}
@test "activate conda root from current version with custom prompt" {
export PYENV_VIRTUALENV_INIT=1
setup_conda "anaconda-2.3.0"
stub pyenv-version-name "echo anaconda-2.3.0"
stub pyenv-virtualenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\""
stub pyenv-prefix "anaconda-2.3.0 : echo \"${PYENV_ROOT}/versions/anaconda-2.3.0\""
stub pyenv-sh-deactivate "--force --quiet : echo deactivated"
PYENV_SHELL="bash" PYENV_VERSION="anaconda-2.3.0" PYENV_VIRTUALENV_PROMPT='venv:{venv}' 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";
export _OLD_VIRTUAL_PS1="\${PS1:-}";
export PS1="venv:anaconda-2.3.0 \${PS1:-}";
export CONDA_PREFIX="${TMP}/pyenv/versions/anaconda-2.3.0"; export CONDA_PREFIX="${TMP}/pyenv/versions/anaconda-2.3.0";
EOS EOS
@@ -66,7 +100,18 @@ deactivated
set -gx PYENV_VIRTUAL_ENV "${TMP}/pyenv/versions/anaconda-2.3.0"; set -gx PYENV_VIRTUAL_ENV "${TMP}/pyenv/versions/anaconda-2.3.0";
set -gx VIRTUAL_ENV "${TMP}/pyenv/versions/anaconda-2.3.0"; set -gx VIRTUAL_ENV "${TMP}/pyenv/versions/anaconda-2.3.0";
set -gx CONDA_DEFAULT_ENV "root"; set -gx CONDA_DEFAULT_ENV "root";
pyenv-virtualenv: prompt changing not working for fish. functions -e _pyenv_old_prompt # remove old prompt function if exists.
# since everything is in memory, it's safe to
# remove it.
functions -c fish_prompt _pyenv_old_prompt # backup old prompt function
# from python-venv
function fish_prompt
set -l prompt (_pyenv_old_prompt) # call old prompt function first since it might
# read exit status
echo -n "(anaconda-2.3.0) " # add virtualenv to prompt
string join -- \n \$prompt # handle multiline prompts
end
EOS EOS
unstub pyenv-version-name unstub pyenv-version-name
@@ -95,9 +140,8 @@ export PYENV_ACTIVATE_SHELL=1;
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1"; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1"; export VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1";
export CONDA_DEFAULT_ENV="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 _OLD_VIRTUAL_PS1="\${PS1}"; export PS1="(miniconda-3.9.1) \${PS1:-}";
export PS1="(miniconda-3.9.1) \${PS1}";
export CONDA_PREFIX="${TMP}/pyenv/versions/miniconda-3.9.1"; export CONDA_PREFIX="${TMP}/pyenv/versions/miniconda-3.9.1";
EOS EOS
@@ -125,9 +169,8 @@ deactivated
export PYENV_VIRTUAL_ENV="${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 VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo";
export CONDA_DEFAULT_ENV="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 _OLD_VIRTUAL_PS1="\${PS1}"; export PS1="(anaconda-2.3.0/envs/foo) \${PS1:-}";
export PS1="(anaconda-2.3.0/envs/foo) \${PS1}";
export CONDA_PREFIX="${TMP}/pyenv/versions/anaconda-2.3.0/envs/foo"; export CONDA_PREFIX="${TMP}/pyenv/versions/anaconda-2.3.0/envs/foo";
. "${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo/etc/conda/activate.d/activate.sh"; . "${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo/etc/conda/activate.d/activate.sh";
EOS EOS
@@ -158,9 +201,8 @@ export PYENV_ACTIVATE_SHELL=1;
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar"; export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar"; export VIRTUAL_ENV="${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar";
export CONDA_DEFAULT_ENV="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 _OLD_VIRTUAL_PS1="\${PS1}"; export PS1="(miniconda-3.9.1/envs/bar) \${PS1:-}";
export PS1="(miniconda-3.9.1/envs/bar) \${PS1}";
export CONDA_PREFIX="${TMP}/pyenv/versions/miniconda-3.9.1/envs/bar"; export CONDA_PREFIX="${TMP}/pyenv/versions/miniconda-3.9.1/envs/bar";
. "${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar/etc/conda/activate.d/activate.sh"; . "${PYENV_ROOT}/versions/miniconda-3.9.1/envs/bar/etc/conda/activate.d/activate.sh";
EOS EOS

View File

@@ -16,6 +16,11 @@ setup() {
unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT
unset VIRTUAL_ENV_DISABLE_PROMPT unset VIRTUAL_ENV_DISABLE_PROMPT
unset _OLD_VIRTUAL_PS1 unset _OLD_VIRTUAL_PS1
stub pyenv-hooks "deactivate : echo"
}
teardown() {
unstub pyenv-hooks
} }
@test "deactivate conda root" { @test "deactivate conda root" {
@@ -34,15 +39,15 @@ unset CONDA_PREFIX
unset PYENV_VIRTUAL_ENV; unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
unset CONDA_DEFAULT_ENV; unset CONDA_DEFAULT_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then if [ -n "\${_OLD_VIRTUAL_PATH:-}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}"; export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PATH;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then if [ -n "\${_OLD_VIRTUAL_PYTHONHOME:-}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}"; export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME; unset _OLD_VIRTUAL_PYTHONHOME;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then if [ -n "\${_OLD_VIRTUAL_PS1:-}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}"; export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1; unset _OLD_VIRTUAL_PS1;
fi; fi;
@@ -77,6 +82,13 @@ if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME"; set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME; set -e _OLD_VIRTUAL_PYTHONHOME;
end; end;
# check if old prompt function exists
if functions -q _pyenv_old_prompt
# remove old prompt function if exists.
functions -e fish_prompt
functions -c _pyenv_old_prompt fish_prompt
functions -e _pyenv_old_prompt
end
if functions -q deactivate; if functions -q deactivate;
functions -e deactivate; functions -e deactivate;
end; end;
@@ -102,15 +114,15 @@ unset CONDA_PREFIX
unset PYENV_VIRTUAL_ENV; unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
unset CONDA_DEFAULT_ENV; unset CONDA_DEFAULT_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then if [ -n "\${_OLD_VIRTUAL_PATH:-}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}"; export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PATH;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then if [ -n "\${_OLD_VIRTUAL_PYTHONHOME:-}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}"; export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME; unset _OLD_VIRTUAL_PYTHONHOME;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then if [ -n "\${_OLD_VIRTUAL_PS1:-}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}"; export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1; unset _OLD_VIRTUAL_PS1;
fi; fi;

View File

@@ -16,6 +16,7 @@ setup() {
unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT
unset VIRTUAL_ENV_DISABLE_PROMPT unset VIRTUAL_ENV_DISABLE_PROMPT
unset _OLD_VIRTUAL_PS1 unset _OLD_VIRTUAL_PS1
stub pyenv-hooks "deactivate : echo"
} }
@test "deactivate virtualenv" { @test "deactivate virtualenv" {
@@ -30,15 +31,15 @@ setup() {
assert_output <<EOS assert_output <<EOS
unset PYENV_VIRTUAL_ENV; unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then if [ -n "\${_OLD_VIRTUAL_PATH:-}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}"; export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PATH;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then if [ -n "\${_OLD_VIRTUAL_PYTHONHOME:-}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}"; export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME; unset _OLD_VIRTUAL_PYTHONHOME;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then if [ -n "\${_OLD_VIRTUAL_PS1:-}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}"; export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1; unset _OLD_VIRTUAL_PS1;
fi; fi;
@@ -54,21 +55,21 @@ EOS
export 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 --quit PYENV_SHELL="bash" run pyenv-sh-deactivate --quiet
assert_success assert_success
assert_output <<EOS assert_output <<EOS
unset PYENV_VIRTUAL_ENV; unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then if [ -n "\${_OLD_VIRTUAL_PATH:-}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}"; export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PATH;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then if [ -n "\${_OLD_VIRTUAL_PYTHONHOME:-}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}"; export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME; unset _OLD_VIRTUAL_PYTHONHOME;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then if [ -n "\${_OLD_VIRTUAL_PS1:-}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}"; export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1; unset _OLD_VIRTUAL_PS1;
fi; fi;
@@ -92,45 +93,15 @@ EOS
pyenv-virtualenv: deactivate venv pyenv-virtualenv: deactivate venv
unset PYENV_VIRTUAL_ENV; unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then if [ -n "\${_OLD_VIRTUAL_PATH:-}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}"; export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PATH;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then if [ -n "\${_OLD_VIRTUAL_PYTHONHOME:-}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}"; export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME; unset _OLD_VIRTUAL_PYTHONHOME;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then 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;
EOS
}
@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 --quiet
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}"; export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1; unset _OLD_VIRTUAL_PS1;
fi; fi;
@@ -154,15 +125,15 @@ unset PYENV_VERSION;
unset PYENV_ACTIVATE_SHELL; unset PYENV_ACTIVATE_SHELL;
unset PYENV_VIRTUAL_ENV; unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then if [ -n "\${_OLD_VIRTUAL_PATH:-}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}"; export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PATH;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then if [ -n "\${_OLD_VIRTUAL_PYTHONHOME:-}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}"; export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME; unset _OLD_VIRTUAL_PYTHONHOME;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then if [ -n "\${_OLD_VIRTUAL_PS1:-}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}"; export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1; unset _OLD_VIRTUAL_PS1;
fi; fi;
@@ -186,15 +157,15 @@ unset PYENV_VERSION;
unset PYENV_ACTIVATE_SHELL; unset PYENV_ACTIVATE_SHELL;
unset PYENV_VIRTUAL_ENV; unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then if [ -n "\${_OLD_VIRTUAL_PATH:-}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}"; export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PATH;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then if [ -n "\${_OLD_VIRTUAL_PYTHONHOME:-}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}"; export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME; unset _OLD_VIRTUAL_PYTHONHOME;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then if [ -n "\${_OLD_VIRTUAL_PS1:-}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}"; export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1; unset _OLD_VIRTUAL_PS1;
fi; fi;
@@ -216,15 +187,15 @@ EOS
assert_output <<EOS assert_output <<EOS
unset PYENV_VIRTUAL_ENV; unset PYENV_VIRTUAL_ENV;
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then if [ -n "\${_OLD_VIRTUAL_PATH:-}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}"; export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PATH;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then if [ -n "\${_OLD_VIRTUAL_PYTHONHOME:-}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}"; export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME; unset _OLD_VIRTUAL_PYTHONHOME;
fi; fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then if [ -n "\${_OLD_VIRTUAL_PS1:-}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}"; export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1; unset _OLD_VIRTUAL_PS1;
fi; fi;
@@ -254,6 +225,13 @@ if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME"; set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME; set -e _OLD_VIRTUAL_PYTHONHOME;
end; end;
# check if old prompt function exists
if functions -q _pyenv_old_prompt
# remove old prompt function if exists.
functions -e fish_prompt
functions -c _pyenv_old_prompt fish_prompt
functions -e _pyenv_old_prompt
end
if functions -q deactivate; if functions -q deactivate;
functions -e deactivate; functions -e deactivate;
end; end;
@@ -280,6 +258,13 @@ if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME"; set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME; set -e _OLD_VIRTUAL_PYTHONHOME;
end; end;
# check if old prompt function exists
if functions -q _pyenv_old_prompt
# remove old prompt function if exists.
functions -e fish_prompt
functions -c _pyenv_old_prompt fish_prompt
functions -e _pyenv_old_prompt
end
if functions -q deactivate; if functions -q deactivate;
functions -e deactivate; functions -e deactivate;
end; end;
@@ -308,6 +293,13 @@ if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME"; set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME; set -e _OLD_VIRTUAL_PYTHONHOME;
end; end;
# check if old prompt function exists
if functions -q _pyenv_old_prompt
# remove old prompt function if exists.
functions -e fish_prompt
functions -c _pyenv_old_prompt fish_prompt
functions -e _pyenv_old_prompt
end
if functions -q deactivate; if functions -q deactivate;
functions -e deactivate; functions -e deactivate;
end; end;
@@ -336,6 +328,13 @@ if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME"; set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME; set -e _OLD_VIRTUAL_PYTHONHOME;
end; end;
# check if old prompt function exists
if functions -q _pyenv_old_prompt
# remove old prompt function if exists.
functions -e fish_prompt
functions -c _pyenv_old_prompt fish_prompt
functions -e _pyenv_old_prompt
end
if functions -q deactivate; if functions -q deactivate;
functions -e deactivate; functions -e deactivate;
end; end;
@@ -362,6 +361,13 @@ if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME"; set -gx PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME; set -e _OLD_VIRTUAL_PYTHONHOME;
end; end;
# check if old prompt function exists
if functions -q _pyenv_old_prompt
# remove old prompt function if exists.
functions -e fish_prompt
functions -c _pyenv_old_prompt fish_prompt
functions -e _pyenv_old_prompt
end
if functions -q deactivate; if functions -q deactivate;
functions -e deactivate; functions -e deactivate;
end; end;

View File

@@ -25,15 +25,15 @@ unstub_pyenv() {
stub pyenv-version-name "echo '${PYENV_VERSION}'" stub pyenv-version-name "echo '${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-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : true" stub pyenv-exec "python3.5 -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 "python3.5 -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" 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 run pyenv-virtualenv venv
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.5.1 python -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv PYENV_VERSION=3.5.1 python3.5 -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
PYENV_VERSION=3.5.1/envs/venv python -s -m ensurepip PYENV_VERSION=3.5.1/envs/venv python -s -m ensurepip
rehashed rehashed
OUT OUT

View File

@@ -6,6 +6,7 @@ setup() {
export PYENV_ROOT="${TMP}/pyenv" export PYENV_ROOT="${TMP}/pyenv"
export HOOK_PATH="${TMP}/i has hooks" export HOOK_PATH="${TMP}/i has hooks"
mkdir -p "$HOOK_PATH" mkdir -p "$HOOK_PATH"
unset PYENV_VIRTUALENV_PROMPT
} }
@test "pyenv-virtualenv hooks" { @test "pyenv-virtualenv hooks" {
@@ -17,7 +18,7 @@ OUT
create_executable "3.5.1" "virtualenv" create_executable "3.5.1" "virtualenv"
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.5.1'" stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.5.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-exec "python3.5 -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.5.1 \"\$@\"" stub pyenv-exec "echo PYENV_VERSION=3.5.1 \"\$@\""
stub pyenv-exec "echo PYENV_VERSION=3.5.1 \"\$@\"" stub pyenv-exec "echo PYENV_VERSION=3.5.1 \"\$@\""
@@ -40,3 +41,74 @@ OUT
unstub pyenv-rehash unstub pyenv-rehash
teardown_version "3.5.1" teardown_version "3.5.1"
} }
@test "pyenv-sh-activate hooks" {
cat > "${HOOK_PATH}/activate.bash" <<OUT
before_activate 'echo "before"'
after_activate 'echo "after"'
OUT
export PYENV_VIRTUALENV_INIT=1
stub pyenv-version-name "echo venv"
stub pyenv-virtualenv-prefix ""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-hooks "activate : echo '$HOOK_PATH'/activate.bash"
stub pyenv-sh-deactivate ""
PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate
assert_success
assert_output <<EOS
before
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export _OLD_VIRTUAL_PS1="\${PS1:-}";
export PS1="(venv) \${PS1:-}";
after
EOS
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
unstub pyenv-hooks
unstub pyenv-sh-deactivate
}
@test "deactivate virtualenv" {
cat > "${HOOK_PATH}/deactivate.bash" <<OUT
before_deactivate 'echo "before"'
after_deactivate 'echo "after"'
OUT
export PYENV_VIRTUALENV_INIT=1
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL=
stub pyenv-hooks "deactivate : echo '$HOOK_PATH'/deactivate.bash"
PYENV_SHELL="bash" run pyenv-sh-deactivate
assert_success
assert_output <<EOS
before
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;
after
EOS
unstub pyenv-hooks
}

View File

@@ -6,7 +6,7 @@ load test_helper
unset PYENV_SHELL unset PYENV_SHELL
SHELL=/bin/false run pyenv-virtualenv-init - SHELL=/bin/false run pyenv-virtualenv-init -
assert_success assert_success
assert_output_contains ' PROMPT_COMMAND="_pyenv_virtualenv_hook;$PROMPT_COMMAND";' assert_output_contains ' PROMPT_COMMAND="_pyenv_virtualenv_hook;${PROMPT_COMMAND-}"'
} }
@test "detect parent shell from script (sh)" { @test "detect parent shell from script (sh)" {
@@ -15,7 +15,7 @@ load test_helper
chmod +x ${TMP}/script.sh chmod +x ${TMP}/script.sh
run ${TMP}/script.sh run ${TMP}/script.sh
assert_success assert_success
assert_output_contains_not ' PROMPT_COMMAND="_pyenv_virtualenv_hook;$PROMPT_COMMAND";' assert_output_contains_not ' PROMPT_COMMAND="_pyenv_virtualenv_hook;${PROMPT_COMMAND-}"'
rm -f "${TMP}/script.sh" rm -f "${TMP}/script.sh"
} }
@@ -25,7 +25,7 @@ load test_helper
chmod +x ${TMP}/script.sh chmod +x ${TMP}/script.sh
run ${TMP}/script.sh run ${TMP}/script.sh
assert_success assert_success
assert_output_contains ' PROMPT_COMMAND="_pyenv_virtualenv_hook;$PROMPT_COMMAND";' assert_output_contains ' PROMPT_COMMAND="_pyenv_virtualenv_hook;${PROMPT_COMMAND-}"'
rm -f "${TMP}/script.sh" rm -f "${TMP}/script.sh"
} }
@@ -54,15 +54,15 @@ 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() {
local ret=\$? local ret=\$?
if [ -n "\$VIRTUAL_ENV" ]; then if [ -n "\${VIRTUAL_ENV-}" ]; then
eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true
else else
eval "\$(pyenv sh-activate --quiet || true)" || true eval "\$(pyenv sh-activate --quiet || true)" || true
fi fi
return \$ret 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-}"
fi fi
EOS EOS
} }
@@ -72,6 +72,8 @@ EOS
run pyenv-virtualenv-init - fish run pyenv-virtualenv-init - fish
assert_success assert_success
assert_output <<EOS assert_output <<EOS
while set index (contains -i -- "${TMP}/pyenv/plugins/pyenv-virtualenv/shims" \$PATH)
set -eg PATH[\$index]; end; set -e index
set -gx PATH '${TMP}/pyenv/plugins/pyenv-virtualenv/shims' \$PATH; set -gx PATH '${TMP}/pyenv/plugins/pyenv-virtualenv/shims' \$PATH;
set -gx PYENV_VIRTUALENV_INIT 1; set -gx PYENV_VIRTUALENV_INIT 1;
function _pyenv_virtualenv_hook --on-event fish_prompt; function _pyenv_virtualenv_hook --on-event fish_prompt;
@@ -95,7 +97,7 @@ 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() {
local ret=\$? local ret=\$?
if [ -n "\$VIRTUAL_ENV" ]; then if [ -n "\${VIRTUAL_ENV-}" ]; then
eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true
else else
eval "\$(pyenv sh-activate --quiet || true)" || true eval "\$(pyenv sh-activate --quiet || true)" || true

View File

@@ -26,15 +26,15 @@ unstub_pyenv() {
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-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : true" stub pyenv-exec "python3.5 -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 "python3.5 -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" 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 run pyenv-virtualenv venv
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.5.1 python -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv PYENV_VERSION=3.5.1 python3.5 -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
PYENV_VERSION=3.5.1/envs/venv python -s -m ensurepip PYENV_VERSION=3.5.1/envs/venv python -s -m ensurepip
rehashed rehashed
OUT OUT
@@ -52,8 +52,8 @@ OUT
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-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : true" stub pyenv-exec "python3.3 -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 "python3.3 -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/3.3.6/envs/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
@@ -62,8 +62,8 @@ OUT
assert_success assert_success
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.3.6 python -m venv ${PYENV_ROOT}/versions/3.3.6/envs/venv PYENV_VERSION=3.3.6 python3.3 -m venv ${PYENV_ROOT}/versions/3.3.6/envs/venv
Installing pip from https://bootstrap.pypa.io/3.3/get-pip.py... Installing pip from https://bootstrap.pypa.io/pip/3.3/get-pip.py...
PYENV_VERSION=3.3.6/envs/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

View File

@@ -14,6 +14,7 @@ setup() {
stub pyenv-rehash " : true" stub pyenv-rehash " : true"
stub pyenv-version-name "echo \${PYENV_VERSION}" stub pyenv-version-name "echo \${PYENV_VERSION}"
stub curl true stub curl true
stub python-build "echo python2.7"
} }
teardown() { teardown() {
@@ -22,6 +23,7 @@ teardown() {
unstub pyenv-prefix unstub pyenv-prefix
unstub pyenv-hooks unstub pyenv-hooks
unstub pyenv-rehash unstub pyenv-rehash
unstub python-build
teardown_version "2.7.8" teardown_version "2.7.8"
rm -fr "$TMP"/* rm -fr "$TMP"/*
} }
@@ -31,6 +33,8 @@ 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 "python2.7 -m venv --help : false"
stub pyenv-exec "python2 -m venv --help : false"
stub pyenv-exec "python -m venv --help : false" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv --verbose * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" 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"
@@ -56,6 +60,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 "python2.7 -m venv --help : false"
stub pyenv-exec "python2 -m venv --help : false"
stub pyenv-exec "python -m venv --help : false" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv --verbose * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" 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"
@@ -92,6 +98,7 @@ OUT
assert_output <<OUT assert_output <<OUT
pyenv-virtualenv: \`python2.7' is not installed in pyenv. pyenv-virtualenv: \`python2.7' is not installed in pyenv.
Run \`pyenv install python2.7' to install it.
OUT OUT
assert_failure assert_failure
@@ -102,3 +109,13 @@ OUT
remove_executable "2.7.8" "python2.7" remove_executable "2.7.8" "python2.7"
remove_executable "2.7.9" "python2.7" remove_executable "2.7.9" "python2.7"
} }
@test "invalid python name" {
run pyenv-virtualenv --verbose --python=99.99.99 venv
assert_output <<OUT
pyenv-virtualenv: \`99.99.99' is not installed in pyenv.
It does not look like a valid Python version. See \`pyenv install --list' for available versions.
OUT
assert_failure
}

View File

@@ -26,14 +26,14 @@ unstub_pyenv() {
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-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : true" stub pyenv-exec "python3.5 -m venv --help : true"
stub pyenv-exec "python -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "python3.5 -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true" stub pyenv-exec "python -s -m ensurepip : true"
run pyenv-virtualenv venv run pyenv-virtualenv venv
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=3.5.1 python -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv PYENV_VERSION=3.5.1 python3.5 -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
rehashed rehashed
OUT OUT
assert [ -x "${PYENV_ROOT}/versions/3.5.1/envs/venv/bin/pydoc" ] assert [ -x "${PYENV_ROOT}/versions/3.5.1/envs/venv/bin/pydoc" ]
@@ -52,7 +52,7 @@ OUT
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-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : true" stub pyenv-exec "python3.5 -m venv --help : true"
stub pyenv-exec "virtualenv * : 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"
@@ -77,6 +77,8 @@ OUT
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-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python3.2 -m venv --help : false"
stub pyenv-exec "python3 -m venv --help : false"
stub pyenv-exec "python -m venv --help : false" stub pyenv-exec "python -m venv --help : false"
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 * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
@@ -103,7 +105,7 @@ OUT
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-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : true" stub pyenv-exec "python3.5 -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 * : 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"
@@ -130,7 +132,7 @@ OUT
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-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python -m venv --help : true" stub pyenv-exec "python3.5 -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 * : 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"
@@ -157,6 +159,8 @@ OUT
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-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python3.2 -m venv --help : false"
stub pyenv-exec "python3 -m venv --help : false"
stub pyenv-exec "python -m venv --help : false" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "pip install virtualenv* : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "pip install virtualenv* : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "virtualenv * : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv * : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\""

View File

@@ -74,8 +74,10 @@ assert_failure() {
assert_equal() { assert_equal() {
if [ "$1" != "$2" ]; then if [ "$1" != "$2" ]; then
{ echo "expected: $1" { echo "expected:"
echo "actual: $2" echo "$1"
echo "actual:"
echo "$2"
} | flunk } | flunk
fi fi
} }

View File

@@ -9,6 +9,9 @@ setup() {
@test "display virtualenv version" { @test "display virtualenv version" {
setup_virtualenv "2.7.7" 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-version-name "echo 2.7.7"
stub pyenv-exec "python2.7 -m venv --help : false"
stub pyenv-exec "python2 -m venv --help : false"
stub pyenv-exec "python -m venv --help : false" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv --version : echo \"1.11\"" stub pyenv-exec "virtualenv --version : echo \"1.11\""
@@ -24,13 +27,14 @@ setup() {
@test "display venv version" { @test "display venv version" {
setup_m_venv "3.4.1" setup_m_venv "3.4.1"
stub pyenv-version-name "echo 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-exec "python3.4 -m venv --help : true"
run pyenv-virtualenv --version run pyenv-virtualenv --version
assert_success assert_success
[[ "$output" == "pyenv-virtualenv "?.?.?" (python -m venv)" ]] [[ "$output" == "pyenv-virtualenv "?.?.?" (python3.4 -m venv)" ]]
unstub pyenv-prefix unstub pyenv-prefix
teardown_m_venv "3.4.1" teardown_m_venv "3.4.1"

View File

@@ -26,20 +26,56 @@ unstub_pyenv() {
export PYENV_VERSION="2.7.11" export PYENV_VERSION="2.7.11"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python2.7 -m venv --help : false"
stub pyenv-exec "python2 -m venv --help : false"
stub pyenv-exec "python -m venv --help : false" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"; mkdir -p \"\$2/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 : true" stub pyenv-exec "python -s */get-pip.py : true"
stub curl true stub curl true
create_executable "${PYENV_VERSION}" "python-config"
create_executable "${PYENV_VERSION}" "python2-config"
create_executable "${PYENV_VERSION}" "python2.7-config"
run pyenv-virtualenv "2.7.11" "venv" run pyenv-virtualenv "2.7.11" "venv"
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=2.7.11 virtualenv ${PYENV_ROOT}/versions/2.7.11/envs/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/pip/2.7/get-pip.py...
rehashed
OUT
assert_success
for x in pydoc python-config python2-config python2.7-config; do
assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/$x" ]
done
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
unstub curl
}
@test "create virtualenv from a given prefix" {
stub_pyenv "2.7.11"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python2.7 -m venv --help : false"
stub pyenv-exec "python2 -m venv --help : 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
stub pyenv-latest "-q 2.7 : echo 2.7.11"
run pyenv-virtualenv "2.7" "venv"
assert_output <<OUT
PYENV_VERSION=2.7.11 virtualenv ${PYENV_ROOT}/versions/2.7.11/envs/venv
Installing pip from https://bootstrap.pypa.io/pip/2.7/get-pip.py...
rehashed rehashed
OUT OUT
assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/pydoc" ] assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/pydoc" ]
assert [ ! -e "${PYENV_ROOT}/versions/2.7" ]
assert_success assert_success
unstub_pyenv unstub_pyenv
@@ -53,6 +89,8 @@ OUT
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${PYENV_VERSION}"
stub pyenv-version-name "echo \${PYENV_VERSION}" stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python2.7 -m venv --help : false"
stub pyenv-exec "python2 -m venv --help : false"
stub pyenv-exec "python -m venv --help : false" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" 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"
@@ -63,7 +101,7 @@ OUT
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=2.7.11 virtualenv ${PYENV_ROOT}/versions/2.7.11/envs/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/pip/2.7/get-pip.py...
rehashed rehashed
OUT OUT
assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/pydoc" ] assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/pydoc" ]
@@ -81,6 +119,8 @@ OUT
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${PYENV_VERSION}"
stub pyenv-version-name "echo \${PYENV_VERSION}" stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python2.7 -m venv --help : false"
stub pyenv-exec "python2 -m venv --help : false"
stub pyenv-exec "python -m venv --help : false" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" 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"
@@ -91,7 +131,7 @@ OUT
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=2.7.11 virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/2.7.11/envs/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/pip/2.7/get-pip.py...
rehashed rehashed
OUT OUT
assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/pydoc" ] assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/pydoc" ]
@@ -109,6 +149,8 @@ OUT
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${PYENV_VERSION}"
stub pyenv-version-name "echo \${PYENV_VERSION}" stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python2.7 -m venv --help : false"
stub pyenv-exec "python2 -m venv --help : false"
stub pyenv-exec "python -m venv --help : false" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" 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"
@@ -119,7 +161,7 @@ OUT
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=2.7.11 virtualenv --verbose --python=${TMP}/python ${PYENV_ROOT}/versions/2.7.11/envs/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/pip/2.7/get-pip.py...
rehashed rehashed
OUT OUT
assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/pydoc" ] assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/pydoc" ]
@@ -172,6 +214,8 @@ OUT
export PYENV_VERSION="2.7.11" export PYENV_VERSION="2.7.11"
stub_pyenv "${PYENV_VERSION}" stub_pyenv "${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false" stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "python2.7 -m venv --help : false"
stub pyenv-exec "python2 -m venv --help : false"
stub pyenv-exec "python -m venv --help : false" stub pyenv-exec "python -m venv --help : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" 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"
@@ -182,7 +226,7 @@ OUT
assert_output <<OUT assert_output <<OUT
PYENV_VERSION=2.7.11 virtualenv ${PYENV_ROOT}/versions/2.7.11/envs/foo PYENV_VERSION=2.7.11 virtualenv ${PYENV_ROOT}/versions/2.7.11/envs/foo
Installing pip from https://bootstrap.pypa.io/get-pip.py... Installing pip from https://bootstrap.pypa.io/pip/2.7/get-pip.py...
rehashed rehashed
OUT OUT
assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/foo/bin/pydoc" ] assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/foo/bin/pydoc" ]