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,
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,
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])),
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')