diff options
author | Steve Dower <steve.dower@python.org> | 2021-12-07 00:07:35 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-07 00:07:35 (GMT) |
commit | b7ef27bc084665ce58d89fc69530c6f9d2d37754 (patch) | |
tree | 4b22280b6ad3fe3f7d54f14c98236085d4e7f2a2 | |
parent | 265918bb1d782ab85c7dbc835eb62d6cfc2145b7 (diff) | |
download | cpython-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.py | 30 | ||||
-rw-r--r-- | Modules/getpath.py | 2 |
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 |