From 2eb3afede0dd5b3c6229a2b8849efbfa18b3e078 Mon Sep 17 00:00:00 2001 From: timrid <6593626+timrid@users.noreply.github.com> Date: Tue, 12 Aug 2025 22:25:06 +0200 Subject: [PATCH] Check if `os.__file__` is available before using it (#1944) * check if os.file is available before using it * use threading.__file__ als last fallback --- .../_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py | 3 ++- src/debugpy/_vendored/pydevd/pydevd_file_utils.py | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py index c0cf3954..0f35b8ca 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py @@ -155,7 +155,8 @@ class FilesFiltering(object): # Make sure we always get at least the standard library location (based on the `os` and # `threading` modules -- it's a bit weird that it may be different on the ci, but it happens). - roots.append(os.path.dirname(os.__file__)) + if hasattr(os, "__file__"): + roots.append(os.path.dirname(os.__file__)) roots.append(os.path.dirname(threading.__file__)) if IS_PYPY: # On PyPy 3.6 (7.3.1) it wrongly says that sysconfig.get_path('stdlib') is diff --git a/src/debugpy/_vendored/pydevd/pydevd_file_utils.py b/src/debugpy/_vendored/pydevd/pydevd_file_utils.py index 390f903c..7ca38344 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_file_utils.py +++ b/src/debugpy/_vendored/pydevd/pydevd_file_utils.py @@ -88,7 +88,14 @@ def _get_library_dir(): break if library_dir is None or not os_path_exists(library_dir): - library_dir = os.path.dirname(os.__file__) + if hasattr(os, "__file__"): + # "os" is a frozen import an thus "os.__file__" is not always set. + # See https://github.com/python/cpython/pull/28656 + library_dir = os.path.dirname(os.__file__) + else: + # "threading" is not a frozen import an thus "threading.__file__" is always set. + import threading + library_dir = os.path.dirname(threading.__file__) return library_dir