[Python-checkins] gh-101543: Ensure Windows registry path is only used when stdlib can't be found (GH-101544)

miss-islington webhook-mailer at python.org
Mon Feb 6 12:34:12 EST 2023


https://github.com/python/cpython/commit/d003bcc91aa9b79c45fc711ce831b736208f0fb5
commit: d003bcc91aa9b79c45fc711ce831b736208f0fb5
branch: 3.11
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2023-02-06T09:34:05-08:00
summary:

gh-101543: Ensure Windows registry path is only used when stdlib can't be found (GH-101544)

(cherry picked from commit 7a253103d4c64fcca4c0939a584c2028d8da6829)

Co-authored-by: Steve Dower <steve.dower at python.org>

files:
A Misc/NEWS.d/next/Windows/2023-02-03-17-53-06.gh-issue-101543.cORAT4.rst
M Modules/getpath.py

diff --git a/Misc/NEWS.d/next/Windows/2023-02-03-17-53-06.gh-issue-101543.cORAT4.rst b/Misc/NEWS.d/next/Windows/2023-02-03-17-53-06.gh-issue-101543.cORAT4.rst
new file mode 100644
index 000000000000..d4e2c6f23013
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2023-02-03-17-53-06.gh-issue-101543.cORAT4.rst
@@ -0,0 +1,2 @@
+Ensure the install path in the registry is only used when the standard
+library hasn't been located in any other way.
diff --git a/Modules/getpath.py b/Modules/getpath.py
index e84714170732..74f918cf28e4 100644
--- a/Modules/getpath.py
+++ b/Modules/getpath.py
@@ -582,7 +582,7 @@ def search_up(prefix, *landmarks, test=isfile):
     # Detect prefix by searching from our executable location for the stdlib_dir
     if STDLIB_SUBDIR and STDLIB_LANDMARKS and executable_dir and not prefix:
         prefix = search_up(executable_dir, *STDLIB_LANDMARKS)
-        if prefix:
+        if prefix and not stdlib_dir:
             stdlib_dir = joinpath(prefix, STDLIB_SUBDIR)
 
     if PREFIX and not prefix:
@@ -631,20 +631,6 @@ def search_up(prefix, *landmarks, test=isfile):
         warn('Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]')
 
 
-# If we haven't set [plat]stdlib_dir already, set them now
-if not stdlib_dir:
-    if prefix:
-        stdlib_dir = joinpath(prefix, STDLIB_SUBDIR)
-    else:
-        stdlib_dir = ''
-
-if not platstdlib_dir:
-    if exec_prefix:
-        platstdlib_dir = joinpath(exec_prefix, PLATSTDLIB_LANDMARK)
-    else:
-        platstdlib_dir = ''
-
-
 # For a venv, update the main prefix/exec_prefix but leave the base ones unchanged
 # XXX: We currently do not update prefix here, but it happens in site.py
 #if venv_prefix:
@@ -706,8 +692,9 @@ def search_up(prefix, *landmarks, test=isfile):
                             pythonpath.extend(v.split(DELIM))
                         i += 1
                     # Paths from the core key get appended last, but only
-                    # when home was not set and we aren't in a build dir
-                    if not home_was_set and not venv_prefix and not build_prefix:
+                    # when home was not set and we haven't found our stdlib
+                    # some other way.
+                    if not home and not stdlib_dir:
                         v = winreg.QueryValue(key, None)
                         if isinstance(v, str):
                             pythonpath.extend(v.split(DELIM))
@@ -722,6 +709,11 @@ def search_up(prefix, *landmarks, test=isfile):
             pythonpath.append(joinpath(prefix, p))
 
     # Then add stdlib_dir and platstdlib_dir
+    if not stdlib_dir and prefix:
+        stdlib_dir = joinpath(prefix, STDLIB_SUBDIR)
+    if not platstdlib_dir and exec_prefix:
+        platstdlib_dir = joinpath(exec_prefix, PLATSTDLIB_LANDMARK)
+
     if os_name == 'nt':
         # QUIRK: Windows generates paths differently
         if platstdlib_dir:
@@ -792,5 +784,6 @@ def search_up(prefix, *landmarks, test=isfile):
 config['base_exec_prefix'] = base_exec_prefix or exec_prefix
 
 config['platlibdir'] = platlibdir
-config['stdlib_dir'] = stdlib_dir
-config['platstdlib_dir'] = platstdlib_dir
+# test_embed expects empty strings, not None
+config['stdlib_dir'] = stdlib_dir or ''
+config['platstdlib_dir'] = platstdlib_dir or ''



More information about the Python-checkins mailing list