From: Victor Stinner Date: Thu, 23 Jan 2025 14:50:04 +0000 (+0100) Subject: gh-128690: Update test_embed for getpath.py exec_prefix change (#129137) X-Git-Tag: v3.14.0a5~267 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b23b27bc556857be73ee0f2379441c422b6fee26;p=thirdparty%2FPython%2Fcpython.git gh-128690: Update test_embed for getpath.py exec_prefix change (#129137) --- diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index bd01913e49d1..ffb69c87a065 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -51,6 +51,14 @@ INIT_LOOPS = 4 MAX_HASH_SEED = 4294967295 ABI_THREAD = 't' if sysconfig.get_config_var('Py_GIL_DISABLED') else '' +# PLATSTDLIB_LANDMARK copied from Modules/getpath.py +if os.name == 'nt': + PLATSTDLIB_LANDMARK = f'{sys.platlibdir}' +else: + VERSION_MAJOR = sys.version_info.major + VERSION_MINOR = sys.version_info.minor + PLATSTDLIB_LANDMARK = (f'{sys.platlibdir}/python{VERSION_MAJOR}.' + f'{VERSION_MINOR}{ABI_THREAD}/lib-dynload') # If we are running from a build dir, but the stdlib has been installed, @@ -1596,7 +1604,13 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): with self.tmpdir_with_python() as tmpdir, \ tempfile.TemporaryDirectory() as pyvenv_home: + ver = sys.version_info + base_prefix = sysconfig.get_config_var("prefix") + + # gh-128690: base_exec_prefix depends if PLATSTDLIB_LANDMARK exists + platstdlib = os.path.join(base_prefix, PLATSTDLIB_LANDMARK) + change_exec_prefix = not os.path.isdir(platstdlib) if not MS_WINDOWS: lib_dynload = os.path.join(pyvenv_home, @@ -1620,7 +1634,8 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): paths = self.module_search_paths() if not MS_WINDOWS: - paths[-1] = lib_dynload + if change_exec_prefix: + paths[-1] = lib_dynload else: paths = [ os.path.join(tmpdir, os.path.basename(paths[0])), @@ -1630,16 +1645,16 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): executable = self.test_exe base_executable = os.path.join(pyvenv_home, os.path.basename(executable)) - exec_prefix = pyvenv_home config = { - 'base_prefix': sysconfig.get_config_var("prefix"), - 'base_exec_prefix': exec_prefix, + 'base_prefix': base_prefix, 'exec_prefix': tmpdir, 'prefix': tmpdir, 'base_executable': base_executable, 'executable': executable, 'module_search_paths': paths, } + if change_exec_prefix: + config['base_exec_prefix'] = pyvenv_home if MS_WINDOWS: config['base_prefix'] = pyvenv_home config['stdlib_dir'] = os.path.join(pyvenv_home, 'Lib')