summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@python.org>2021-12-07 00:07:35 (GMT)
committerGitHub <noreply@github.com>2021-12-07 00:07:35 (GMT)
commitb7ef27bc084665ce58d89fc69530c6f9d2d37754 (patch)
tree4b22280b6ad3fe3f7d54f14c98236085d4e7f2a2
parent265918bb1d782ab85c7dbc835eb62d6cfc2145b7 (diff)
downloadcpython-b7ef27bc084665ce58d89fc69530c6f9d2d37754.zip
cpython-b7ef27bc084665ce58d89fc69530c6f9d2d37754.tar.gz
cpython-b7ef27bc084665ce58d89fc69530c6f9d2d37754.tar.bz2
bpo-45582: Ensure PYTHONHOME still overrides detected build prefixes (GH-29948)
-rw-r--r--Lib/test/test_getpath.py30
-rw-r--r--Modules/getpath.py2
2 files changed, 32 insertions, 0 deletions
diff --git a/Lib/test/test_getpath.py b/Lib/test/test_getpath.py
index c18689c..9dd167b 100644
--- a/Lib/test/test_getpath.py
+++ b/Lib/test/test_getpath.py
@@ -208,6 +208,36 @@ class MockGetPathTests(unittest.TestCase):
actual = getpath(ns, expected)
self.assertEqual(expected, actual)
+ def test_buildtree_pythonhome_win32(self):
+ "Test an out-of-build-tree layout on Windows with PYTHONHOME override."
+ ns = MockNTNamespace(
+ argv0=r"C:\Out\python.exe",
+ real_executable=r"C:\Out\python.exe",
+ ENV_PYTHONHOME=r"C:\CPython",
+ )
+ ns.add_known_xfile(r"C:\Out\python.exe")
+ ns.add_known_file(r"C:\CPython\Lib\os.py")
+ ns.add_known_file(r"C:\Out\pybuilddir.txt", [""])
+ expected = dict(
+ executable=r"C:\Out\python.exe",
+ base_executable=r"C:\Out\python.exe",
+ prefix=r"C:\CPython",
+ exec_prefix=r"C:\CPython",
+ # This build_prefix is a miscalculation, because we have
+ # moved the output direction out of the prefix.
+ # Specify PYTHONHOME to get the correct prefix/exec_prefix
+ build_prefix="C:\\",
+ _is_python_build=1,
+ module_search_paths_set=1,
+ module_search_paths=[
+ r"C:\Out\python98.zip",
+ r"C:\CPython\Lib",
+ r"C:\Out",
+ ],
+ )
+ actual = getpath(ns, expected)
+ self.assertEqual(expected, actual)
+
def test_normal_posix(self):
"Test a 'standard' install layout on *nix"
ns = MockPosixNamespace(
diff --git a/Modules/getpath.py b/Modules/getpath.py
index 2eadfba..4ef49a8 100644
--- a/Modules/getpath.py
+++ b/Modules/getpath.py
@@ -500,6 +500,8 @@ else:
prefix, had_delim, exec_prefix = home.partition(DELIM)
if not had_delim:
exec_prefix = prefix
+ # Reset the standard library directory if it was already set
+ stdlib_dir = None
# First try to detect prefix by looking alongside our runtime library, if known