From 3661bda7c8546d710859fd29d323b81e6ef40c4b Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Fri, 4 Sep 2026 15:19:47 +0200 Subject: [PATCH] gh-142349: Clarify that sys.lazy_modules may contain extra items (GH-155547) As an author of a debugging/introspection tool, I need an honest description of what's in `lazy_modules` and what kind of post-processing I'm expected to do. (cherry picked from commit 2632610ec19123f7fb85effd632775011f92ab35) Co-authored-by: Petr Viktorin --- Doc/library/sys.rst | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index e4ddc3a0e5a34f9..82e8af611a6550f 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -1485,11 +1485,24 @@ always available. Unless explicitly noted otherwise, all variables are read-only .. data:: lazy_modules A :class:`set` of fully qualified module name strings that have been lazily - imported in the current interpreter but not yet loaded. When a - lazily imported module is accessed for the first time, its name is removed - from this set. + imported in the current interpreter but not yet loaded. + When a lazily imported module is accessed for the first time, its name is + typically removed from this set. - This attribute is intended for debugging and introspection. + The set may contain some additional strings. + It is intended for debugging and introspection, and consumers are expected + to verify each entry's status. + + .. impl-detail:: + + Currently, :data:`!lazy_modules` may also contain: + + * names of *attributes* (non-modules), such as ``"pathlib.Path"`` after + running ``lazy from pathlib import Path``, and + * names of items than have already been accessed. + + In future versions of Python, these may be removed, and/or additional + extras may be added. See also :func:`set_lazy_imports` and :pep:`810`.