]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-128690: Update test_embed for getpath.py exec_prefix change (#129137)
authorVictor Stinner <vstinner@python.org>
Thu, 23 Jan 2025 14:50:04 +0000 (15:50 +0100)
committerGitHub <noreply@github.com>
Thu, 23 Jan 2025 14:50:04 +0000 (15:50 +0100)
Lib/test/test_embed.py

index bd01913e49d170a8f31e613f804c09cc8230d7d9..ffb69c87a065aac9ca44d4bdedbd22bfbe4ac5e3 100644 (file)
@@ -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')