Skip to content

Commit 3791706

Browse files
authored
Fix failing to detect -m venv when "python" is not provided by the distro (#479)
1 parent b90bd92 commit 3791706

File tree

9 files changed

+32
-44
lines changed

9 files changed

+32
-44
lines changed

bin/pyenv-virtualenv

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,17 @@ detect_venv() {
155155
if [ -x "${prefix}/bin/virtualenv" ]; then
156156
HAS_VIRTUALENV=1
157157
fi
158-
# Prefer `python3.x` executable if available (#206, #282)
159158
local python
160-
for python in "python${PYENV_VERSION%.*}" "python${PYENV_VERSION%%.*}" "python"; do
159+
local -a pythons
160+
if [[ $PYENV_VERSION == "system" ]]; then
161+
# Prefer `python3.x` executable if available (#206, #282)
162+
pythons=("python3" "python" "python2")
163+
else
164+
# as per PEP 394, custom activated Python environments should provide the "python" command
165+
# this includes Pyenv-provided installations
166+
pythons=("python")
167+
fi
168+
for python in "${pythons[@]}"; do
161169
if pyenv-exec "${python}" -m venv --help 1>/dev/null 2>&1; then
162170
HAS_M_VENV=1
163171
M_VENV_PYTHON_BIN="${python}"

test/envs.bats

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ unstub_pyenv() {
2525
stub pyenv-version-name "echo '${PYENV_VERSION}'"
2626
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
2727
stub pyenv-virtualenv-prefix " : false"
28-
stub pyenv-exec "python3.5 -m venv --help : true"
29-
stub pyenv-exec "python3.5 -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin"
28+
stub pyenv-exec "python -m venv --help : true"
29+
stub pyenv-exec "python -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin"
3030
stub pyenv-exec "python -s -m ensurepip : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin/pip"
3131

3232
run pyenv-virtualenv venv
3333

3434
assert_success
3535
assert_output <<OUT
36-
PYENV_VERSION=3.5.1 python3.5 -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
36+
PYENV_VERSION=3.5.1 python -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
3737
PYENV_VERSION=3.5.1/envs/venv python -s -m ensurepip
3838
rehashed
3939
OUT

test/hooks.bats

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ OUT
1717
create_executable "3.5.1" "virtualenv"
1818
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.5.1'"
1919
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.5.1'"
20-
stub pyenv-exec "python3.5 -m venv --help : true"
20+
stub pyenv-exec "python -m venv --help : true"
2121
stub pyenv-hooks "virtualenv : echo '$HOOK_PATH'/virtualenv.bash"
2222
stub pyenv-exec "echo PYENV_VERSION=3.5.1 \"\$@\""
2323
stub pyenv-exec "echo PYENV_VERSION=3.5.1 \"\$@\""

test/pip.bats

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,16 @@ unstub_pyenv() {
2626
stub_pyenv "${PYENV_VERSION}"
2727
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
2828
stub pyenv-virtualenv-prefix " : false"
29-
stub pyenv-exec "python3.5 -m venv --help : true"
30-
stub pyenv-exec "python3.5 -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin"
29+
stub pyenv-exec "python -m venv --help : true"
30+
stub pyenv-exec "python -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin"
3131
stub pyenv-exec "python -s -m ensurepip : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/3.5.1/envs/venv/bin/pip"
3232

3333
run pyenv-virtualenv venv
3434

3535
assert_success
36+
3637
assert_output <<OUT
37-
PYENV_VERSION=3.5.1 python3.5 -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
38+
PYENV_VERSION=3.5.1 python -m venv ${TMP}/pyenv/versions/3.5.1/envs/venv
3839
PYENV_VERSION=3.5.1/envs/venv python -s -m ensurepip
3940
rehashed
4041
OUT
@@ -52,8 +53,8 @@ OUT
5253
stub_pyenv "${PYENV_VERSION}"
5354
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
5455
stub pyenv-virtualenv-prefix " : false"
55-
stub pyenv-exec "python3.3 -m venv --help : true"
56-
stub pyenv-exec "python3.3 -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.3.6/envs/venv/bin"
56+
stub pyenv-exec "python -m venv --help : true"
57+
stub pyenv-exec "python -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.3.6/envs/venv/bin"
5758
stub pyenv-exec "python -s -m ensurepip : false"
5859
stub pyenv-exec "python -s */get-pip.py : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/3.3.6/envs/venv/bin/pip"
5960
stub curl true
@@ -62,7 +63,7 @@ OUT
6263

6364
assert_success
6465
assert_output <<OUT
65-
PYENV_VERSION=3.3.6 python3.3 -m venv ${PYENV_ROOT}/versions/3.3.6/envs/venv
66+
PYENV_VERSION=3.3.6 python -m venv ${PYENV_ROOT}/versions/3.3.6/envs/venv
6667
Installing pip from https://bootstrap.pypa.io/pip/3.3/get-pip.py...
6768
PYENV_VERSION=3.3.6/envs/venv python -s ${TMP}/pyenv/cache/get-pip.py
6869
rehashed

test/python.bats

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,20 @@ teardown() {
3333
create_executable "2.7.8" "python2.7"
3434
remove_executable "2.7.9" "python2.7"
3535

36-
stub pyenv-exec "python2.7 -m venv --help : false"
37-
stub pyenv-exec "python2 -m venv --help : false"
3836
stub pyenv-exec "python -m venv --help : false"
3937
stub pyenv-exec "virtualenv --verbose * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
4038
stub pyenv-exec "python -s -m ensurepip : true"
4139
stub pyenv-which "python2.7 : echo ${PYENV_ROOT}/versions/2.7.8/bin/python2.7"
4240

4341
run pyenv-virtualenv --verbose --python=python2.7 venv
4442

43+
unstub pyenv-exec
4544
assert_output <<OUT
4645
PYENV_VERSION=2.7.8 virtualenv --verbose --python=${PYENV_ROOT}/versions/2.7.8/bin/python2.7 ${PYENV_ROOT}/versions/2.7.8/envs/venv
4746
OUT
4847
assert_success
4948

5049
unstub pyenv-which
51-
unstub pyenv-exec
5250

5351
remove_executable "2.7.7" "python2.7"
5452
remove_executable "2.7.8" "python2.7"
@@ -60,8 +58,6 @@ OUT
6058
remove_executable "2.7.8" "python2.7"
6159
create_executable "2.7.9" "python2.7"
6260

63-
stub pyenv-exec "python2.7 -m venv --help : false"
64-
stub pyenv-exec "python2 -m venv --help : false"
6561
stub pyenv-exec "python -m venv --help : false"
6662
stub pyenv-exec "virtualenv --verbose * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
6763
stub pyenv-exec "python -s -m ensurepip : true"
@@ -118,4 +114,4 @@ pyenv-virtualenv: \`99.99.99' is not installed in pyenv.
118114
It does not look like a valid Python version. See \`pyenv install --list' for available versions.
119115
OUT
120116
assert_failure
121-
}
117+
}

test/pyvenv.bats

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ unstub_pyenv() {
2626
stub_pyenv "${PYENV_VERSION}"
2727
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
2828
stub pyenv-virtualenv-prefix " : false"
29-
stub pyenv-exec "python3.5 -m venv --help : true"
30-
stub pyenv-exec "python3.5 -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
29+
stub pyenv-exec "python -m venv --help : true"
30+
stub pyenv-exec "python -m venv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
3131
stub pyenv-exec "python -s -m ensurepip : true"
3232

3333
run pyenv-virtualenv venv
3434

3535
assert_output <<OUT
36-
PYENV_VERSION=3.5.1 python3.5 -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
36+
PYENV_VERSION=3.5.1 python -m venv ${PYENV_ROOT}/versions/3.5.1/envs/venv
3737
rehashed
3838
OUT
3939
assert [ -x "${PYENV_ROOT}/versions/3.5.1/envs/venv/bin/pydoc" ]
@@ -52,7 +52,7 @@ OUT
5252
stub_pyenv "${PYENV_VERSION}"
5353
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
5454
stub pyenv-virtualenv-prefix " : false"
55-
stub pyenv-exec "python3.5 -m venv --help : true"
55+
stub pyenv-exec "python -m venv --help : true"
5656
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
5757
stub pyenv-exec "python -s -m ensurepip : true"
5858

@@ -77,8 +77,6 @@ OUT
7777
stub_pyenv "${PYENV_VERSION}"
7878
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
7979
stub pyenv-virtualenv-prefix " : false"
80-
stub pyenv-exec "python3.2 -m venv --help : false"
81-
stub pyenv-exec "python3 -m venv --help : false"
8280
stub pyenv-exec "python -m venv --help : false"
8381
stub pyenv-exec "pip install virtualenv* : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
8482
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
@@ -105,7 +103,7 @@ OUT
105103
stub_pyenv "${PYENV_VERSION}"
106104
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
107105
stub pyenv-virtualenv-prefix " : false"
108-
stub pyenv-exec "python3.5 -m venv --help : true"
106+
stub pyenv-exec "python -m venv --help : true"
109107
stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
110108
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
111109
stub pyenv-exec "python -s -m ensurepip : true"
@@ -132,7 +130,7 @@ OUT
132130
stub_pyenv "${PYENV_VERSION}"
133131
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
134132
stub pyenv-virtualenv-prefix " : false"
135-
stub pyenv-exec "python3.5 -m venv --help : true"
133+
stub pyenv-exec "python -m venv --help : true"
136134
stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
137135
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
138136
stub pyenv-exec "python -s -m ensurepip : true"
@@ -159,8 +157,6 @@ OUT
159157
stub_pyenv "${PYENV_VERSION}"
160158
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
161159
stub pyenv-virtualenv-prefix " : false"
162-
stub pyenv-exec "python3.2 -m venv --help : false"
163-
stub pyenv-exec "python3 -m venv --help : false"
164160
stub pyenv-exec "python -m venv --help : false"
165161
stub pyenv-exec "pip install virtualenv* : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
166162
stub pyenv-exec "virtualenv * : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\""

test/test_helper.bash

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,4 @@ setup_conda() {
171171
teardown_conda() {
172172
rm -fr "${PYENV_ROOT}/versions/$1"
173173
}
174+

test/version.bats

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ setup() {
1010
setup_virtualenv "2.7.7"
1111
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/2.7.7'"
1212
stub pyenv-version-name "echo 2.7.7"
13-
stub pyenv-exec "python2.7 -m venv --help : false"
14-
stub pyenv-exec "python2 -m venv --help : false"
1513
stub pyenv-exec "python -m venv --help : false"
1614
stub pyenv-exec "virtualenv --version : echo \"1.11\""
1715

@@ -29,12 +27,12 @@ setup() {
2927
setup_m_venv "3.4.1"
3028
stub pyenv-version-name "echo 3.4.1"
3129
stub pyenv-prefix "echo '${PYENV_ROOT}/versions/3.4.1'"
32-
stub pyenv-exec "python3.4 -m venv --help : true"
30+
stub pyenv-exec "python -m venv --help : true"
3331

3432
run pyenv-virtualenv --version
3533

3634
assert_success
37-
[[ "$output" == "pyenv-virtualenv "?.?.?" (python3.4 -m venv)" ]]
35+
[[ "$output" == "pyenv-virtualenv "?.?.?" (python -m venv)" ]]
3836

3937
unstub pyenv-prefix
4038
teardown_m_venv "3.4.1"

test/virtualenv.bats

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ unstub_pyenv() {
2626
export PYENV_VERSION="2.7.11"
2727
stub_pyenv "${PYENV_VERSION}"
2828
stub pyenv-virtualenv-prefix " : false"
29-
stub pyenv-exec "python2.7 -m venv --help : false"
30-
stub pyenv-exec "python2 -m venv --help : false"
3129
stub pyenv-exec "python -m venv --help : false"
3230
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"; mkdir -p \"\$2/bin\""
3331
stub pyenv-exec "python -s -m ensurepip : false"
@@ -58,8 +56,6 @@ OUT
5856
@test "create virtualenv from a given prefix" {
5957
stub_pyenv "2.7.11"
6058
stub pyenv-virtualenv-prefix " : false"
61-
stub pyenv-exec "python2.7 -m venv --help : false"
62-
stub pyenv-exec "python2 -m venv --help : false"
6359
stub pyenv-exec "python -m venv --help : false"
6460
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
6561
stub pyenv-exec "python -s -m ensurepip : false"
@@ -89,8 +85,6 @@ OUT
8985
stub_pyenv "${PYENV_VERSION}"
9086
stub pyenv-version-name "echo \${PYENV_VERSION}"
9187
stub pyenv-virtualenv-prefix " : false"
92-
stub pyenv-exec "python2.7 -m venv --help : false"
93-
stub pyenv-exec "python2 -m venv --help : false"
9488
stub pyenv-exec "python -m venv --help : false"
9589
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
9690
stub pyenv-exec "python -s -m ensurepip : false"
@@ -119,8 +113,6 @@ OUT
119113
stub_pyenv "${PYENV_VERSION}"
120114
stub pyenv-version-name "echo \${PYENV_VERSION}"
121115
stub pyenv-virtualenv-prefix " : false"
122-
stub pyenv-exec "python2.7 -m venv --help : false"
123-
stub pyenv-exec "python2 -m venv --help : false"
124116
stub pyenv-exec "python -m venv --help : false"
125117
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
126118
stub pyenv-exec "python -s -m ensurepip : false"
@@ -149,8 +141,6 @@ OUT
149141
stub_pyenv "${PYENV_VERSION}"
150142
stub pyenv-version-name "echo \${PYENV_VERSION}"
151143
stub pyenv-virtualenv-prefix " : false"
152-
stub pyenv-exec "python2.7 -m venv --help : false"
153-
stub pyenv-exec "python2 -m venv --help : false"
154144
stub pyenv-exec "python -m venv --help : false"
155145
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
156146
stub pyenv-exec "python -s -m ensurepip : false"
@@ -214,8 +204,6 @@ OUT
214204
export PYENV_VERSION="2.7.11"
215205
stub_pyenv "${PYENV_VERSION}"
216206
stub pyenv-virtualenv-prefix " : false"
217-
stub pyenv-exec "python2.7 -m venv --help : false"
218-
stub pyenv-exec "python2 -m venv --help : false"
219207
stub pyenv-exec "python -m venv --help : false"
220208
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
221209
stub pyenv-exec "python -s -m ensurepip : false"

0 commit comments

Comments
 (0)