code: def should_use_ephemeral_cache(
      req,  # type: InstallRequirement
      format_control,  # type: FormatControl
      autobuilding,  # type: bool
      cache_available  # type: bool
  ):
      # type: (...) -> Optional[bool]
      
      if req.constraint:
          return None
      if req.is_wheel:
          if not autobuilding:
              logger.info(
                  'Skipping %s, due to already being wheel.', req.name,
              )
          return None
      if not autobuilding:
          return False
  
      if req.editable or not req.source_dir:
          return None
  
      if req.link and not req.link.is_artifact:
          # VCS checkout. Build wheel just for this run.
          return True
  
      if "binary" not in format_control.get_allowed_formats(
              canonicalize_name(req.name)):
          logger.info(
              "Skipping bdist_wheel for %s, due to binaries "
              "being disabled for it.", req.name,
          )
          return None
  
      link = req.link
      base, ext = link.splitext()
      if cache_available and _contains_egg_info(base):
          return False
  
      # Otherwise, build the wheel just for this run using the ephemeral
      # cache since we are either in the case of e.g. a local directory, or
      # no cache directory is available to use.
      return True
docs: Return whether to build an InstallRequirement object using the
      ephemeral cache.
  
      :param cache_available: whether a cache directory is available for the
          autobuilding=True case.
  
      :return: True or False to build the requirement with ephem_cache=True
          or False, respectively; or None not to build the requirement.