diff --git a/news/13567.bugfix.rst b/news/13567.bugfix.rst new file mode 100644 index 00000000000..bff3c5431a6 --- /dev/null +++ b/news/13567.bugfix.rst @@ -0,0 +1 @@ +Do not break with FileNotFoundError when loading site-config-dir location from windows registry (CSIDL_COMMON_APPDATA). diff --git a/src/pip/_internal/utils/appdirs.py b/src/pip/_internal/utils/appdirs.py index 4152528f68c..367271beabc 100644 --- a/src/pip/_internal/utils/appdirs.py +++ b/src/pip/_internal/utils/appdirs.py @@ -44,9 +44,15 @@ def site_config_dirs(appname: str) -> list[str]: dirval = _appdirs.site_data_dir(appname, appauthor=False, multipath=True) return dirval.split(os.pathsep) - dirval = _appdirs.site_config_dir(appname, appauthor=False, multipath=True) if sys.platform == "win32": - return [dirval] + try: + # Causes FileNotFoundError on attempt to access a registry key that does + # not exist. This should not break apart pip configuration loading. + dirval = _appdirs.site_config_dir(appname, appauthor=False, multipath=True) + return [dirval] + except FileNotFoundError: + return [] # Unix-y system. Look in /etc as well. + dirval = _appdirs.site_config_dir(appname, appauthor=False, multipath=True) return dirval.split(os.pathsep) + ["/etc"]