From 3fd64dbf4fdb90c3208e24c8c974f01ae854db8b Mon Sep 17 00:00:00 2001 From: Korenevskiy Denis Date: Tue, 2 Sep 2025 11:06:37 +0300 Subject: [PATCH] do not break apart when no common appdata location is set in registry --- news/13567.bugfix.rst | 1 + src/pip/_internal/utils/appdirs.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 news/13567.bugfix.rst 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"]