class_docstr: Fill-in metadata and options that can be automatically derived
  (from other metadata/options, the file system or conventions)
class_docstr_tok: ["Fill-in","metadata","and","options","that","can","be","automatically","derived","(","from","other","metadata\/options",",","the","file","system","or","conventions",")"]
docstr: Exactly one module or package
code: def _find_name_single_package_or_module(self) -> Optional[str]:
      """Exactly one module or package"""
      for field in ("packages", "py_modules"):
          items = getattr(self.dist, field, None) or []
          if items and len(items) == 1:
              log.debug(
                  f"Single module/package detected, name: {items[0]}"
              )
              return items[0]
  
      return None
  
imports: import itertools
  import os
  from fnmatch import fnmatchcase
  from glob import glob
  from pathlib import Path
  from typing import TYPE_CHECKING, Dict, Iterable, Iterator, List, Mapping, Optional, Tuple, Union
  import _distutils_hack.override
  from distutils import log
  from distutils.util import convert_path
label_desc: Use image node_id 16 for calling the ConfigDiscovery obj's underlying member method code with example usage: obj._find_name_single_package_or_module() and returns: None, items