mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-135773: have pyvenv.cfg without home key anchor a venv and deduce home (#135831)
This is still formally undefined behaviour, but we may as well keep the *same* undefined behaviour as previous versions. PEP 796 proposes a cleaner and more consistent replacement for 3.15+
This commit is contained in:
parent
8ac7613dc8
commit
93263d4314
2 changed files with 25 additions and 7 deletions
|
@ -354,6 +354,27 @@ class MockGetPathTests(unittest.TestCase):
|
||||||
actual = getpath(ns, expected)
|
actual = getpath(ns, expected)
|
||||||
self.assertEqual(expected, actual)
|
self.assertEqual(expected, actual)
|
||||||
|
|
||||||
|
def test_venv_posix_without_home_key(self):
|
||||||
|
ns = MockPosixNamespace(
|
||||||
|
argv0="/venv/bin/python3",
|
||||||
|
PREFIX="/usr",
|
||||||
|
ENV_PATH="/usr/bin",
|
||||||
|
)
|
||||||
|
# Setup the bare minimum venv
|
||||||
|
ns.add_known_xfile("/usr/bin/python3")
|
||||||
|
ns.add_known_xfile("/venv/bin/python3")
|
||||||
|
ns.add_known_link("/venv/bin/python3", "/usr/bin/python3")
|
||||||
|
ns.add_known_file("/venv/pyvenv.cfg", [
|
||||||
|
# home = key intentionally omitted
|
||||||
|
])
|
||||||
|
expected = dict(
|
||||||
|
executable="/venv/bin/python3",
|
||||||
|
prefix="/venv",
|
||||||
|
base_prefix="/usr",
|
||||||
|
)
|
||||||
|
actual = getpath(ns, expected)
|
||||||
|
self.assertEqual(expected, actual)
|
||||||
|
|
||||||
def test_venv_changed_name_posix(self):
|
def test_venv_changed_name_posix(self):
|
||||||
"Test a venv layout on *nix."
|
"Test a venv layout on *nix."
|
||||||
ns = MockPosixNamespace(
|
ns = MockPosixNamespace(
|
||||||
|
|
|
@ -364,10 +364,9 @@ if not py_setpath:
|
||||||
venv_prefix = None
|
venv_prefix = None
|
||||||
pyvenvcfg = []
|
pyvenvcfg = []
|
||||||
|
|
||||||
# Search for the 'home' key in pyvenv.cfg. Currently, we don't consider the
|
# Search for the 'home' key in pyvenv.cfg. If a home key isn't found,
|
||||||
# presence of a pyvenv.cfg file without a 'home' key to signify the
|
# then it means a venv is active and home is based on the venv's
|
||||||
# existence of a virtual environment — we quietly ignore them.
|
# executable (if its a symlink, home is where the symlink points).
|
||||||
# XXX: If we don't find a 'home' key, we don't look for another pyvenv.cfg!
|
|
||||||
for line in pyvenvcfg:
|
for line in pyvenvcfg:
|
||||||
key, had_equ, value = line.partition('=')
|
key, had_equ, value = line.partition('=')
|
||||||
if had_equ and key.strip().lower() == 'home':
|
if had_equ and key.strip().lower() == 'home':
|
||||||
|
@ -412,10 +411,8 @@ if not py_setpath:
|
||||||
if isfile(candidate):
|
if isfile(candidate):
|
||||||
base_executable = candidate
|
base_executable = candidate
|
||||||
break
|
break
|
||||||
|
# home key found; stop iterating over lines
|
||||||
break
|
break
|
||||||
else:
|
|
||||||
# We didn't find a 'home' key in pyvenv.cfg (no break), reset venv_prefix.
|
|
||||||
venv_prefix = None
|
|
||||||
|
|
||||||
|
|
||||||
# ******************************************************************************
|
# ******************************************************************************
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue