From: Eric Snow Date: Thu, 14 Oct 2021 20:48:32 +0000 (-0600) Subject: bpo-45471: Do not set PyConfig.stdlib_dir in Py_SetPythonHome(). (gh-28954) X-Git-Tag: v3.11.0a2~199 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0bbea0723ee07f9d7ad9745f0e1875718ef38715;p=thirdparty%2FPython%2Fcpython.git bpo-45471: Do not set PyConfig.stdlib_dir in Py_SetPythonHome(). (gh-28954) The change in gh-28586 (bpo-45211) should not have included code to set _Py_path_config.stdlib_dir in Py_SetPythonHome(). We fix that here. https://bugs.python.org/issue45471 --- diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index 41e092019c49..4cbb4c2c1ce3 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -1247,6 +1247,11 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): self.fail(f"Unable to find home in {paths!r}") prefix = exec_prefix = home + if MS_WINDOWS: + stdlib = os.path.join(home, sys.platlibdir) + else: + version = f'{sys.version_info.major}.{sys.version_info.minor}' + stdlib = os.path.join(home, sys.platlibdir, f'python{version}') expected_paths = self.module_search_paths(prefix=home, exec_prefix=home) config = { @@ -1257,7 +1262,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): 'exec_prefix': exec_prefix, 'base_exec_prefix': exec_prefix, 'pythonpath_env': paths_str, - 'stdlib_dir': home, + 'stdlib_dir': stdlib, } self.default_program_name(config) env = {'TESTHOME': home, 'PYTHONPATH': paths_str} diff --git a/Python/pathconfig.c b/Python/pathconfig.c index 2ebb9d39b8c2..ad22222e000f 100644 --- a/Python/pathconfig.c +++ b/Python/pathconfig.c @@ -530,13 +530,10 @@ Py_SetPythonHome(const wchar_t *home) PyMem_RawFree(_Py_path_config.home); _Py_path_config.home = _PyMem_RawWcsdup(home); - if (_Py_path_config.home != NULL) { - _Py_path_config.stdlib_dir = _PyMem_RawWcsdup(home); - } PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc); - if (_Py_path_config.home == NULL || _Py_path_config.stdlib_dir == NULL) { + if (_Py_path_config.home == NULL) { path_out_of_memory(__func__); } }