diff --git a/Lib/pyclbr.py b/Lib/pyclbr.py index dd58ada0aa5..4d40b87f164 100644 --- a/Lib/pyclbr.py +++ b/Lib/pyclbr.py @@ -142,10 +142,10 @@ def _readmodule(module, path, inpackage=None): search_path = path + sys.path # XXX This will change once issue19944 lands. spec = importlib.util._find_spec_from_path(fullmodule, search_path) - fname = spec.loader.get_filename(fullmodule) _modules[fullmodule] = dict - if spec.loader.is_package(fullmodule): - dict['__path__'] = [os.path.dirname(fname)] + # is module a package? + if spec.submodule_search_locations is not None: + dict['__path__'] = spec.submodule_search_locations try: source = spec.loader.get_source(fullmodule) if source is None: @@ -154,6 +154,8 @@ def _readmodule(module, path, inpackage=None): # not Python source, can't do anything with this module return dict + fname = spec.loader.get_filename(fullmodule) + f = io.StringIO(source) stack = [] # stack of (class, indent) pairs diff --git a/Misc/NEWS b/Misc/NEWS index 78423dd37a8..af4f6c9de67 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -226,6 +226,9 @@ Core and Builtins Library ------- +- Issue #26569: Fix :func:`pyclbr.readmodule` and :func:`pyclbr.readmodule_ex` + to support importing packages. + - Issue #26499: Account for remaining Content-Length in HTTPResponse.readline() and read1(). Based on patch by Silent Ghost. Also document that HTTPResponse now supports these methods.