docstr: Print a report to stdout, listing the found modules with their
  paths, as well as modules that are missing, or seem to be missing.
docstr_tok: ["Print","a","report","to","stdout",",","listing","the","found","modules","with","their","paths",",","as","well","as","modules","that","are","missing",",","or","seem","to","be","missing","."]
code: def report(self):
      """Print a report to stdout, listing the found modules with their
      paths, as well as modules that are missing, or seem to be missing.
      """
      print()
      print("  %-25s %s" % ("Name", "File"))
      print("  %-25s %s" % ("----", "----"))
      # Print modules found
      keys = sorted(self.modules.keys())
      for key in keys:
          m = self.modules[key]
          if m.__path__:
              print("P", end=" ")
          else:
              print("m", end=" ")
          print("%-25s" % key, m.__file__ or "")
  
      # Print missing modules
      missing, maybe = self.any_missing_maybe()
      if missing:
          print()
          print("Missing modules:")
          for name in missing:
              mods = sorted(self.badmodules[name].keys())
              print("?", name, "imported from", ", ".join(mods))
      # Print modules that may be missing, but then again, maybe not...
      if maybe:
          print()
          print(
              "Submodules that appear to be missing, but could also be",
              end=" ",
          )
          print("global names in the parent package:")
          for name in maybe:
              mods = sorted(self.badmodules[name].keys())
              print("?", name, "imported from", ", ".join(mods))
  
imports: import dis
  import importlib._bootstrap_external
  import importlib.machinery
  import marshal
  import os
  import io
  import sys
label_desc: Use image node_id 22 for calling the ModuleFinder obj's underlying member method code with example usage: obj.report() without return types