docs: def get_binary_dist(self, requirement):
          """
          Get or create a cached binary distribution archive.
  
          :param requirement: A :class:`.Requirement` object.
          :returns: An iterable of tuples with two values each: A
                    :class:`tarfile.TarInfo` object and a file-like object.
  
          Gets the cached binary distribution that was previously built for the
          given requirement. If no binary distribution has been cached yet, a new
          binary distribution is built and added to the cache.
  
          Uses :func:`build_binary_dist()` to build binary distribution
          archives. If this fails with a build error :func:`get_binary_dist()`
          will use :class:`.SystemPackageManager` to check for and install
          missing system packages and retry the build when missing system
          packages were installed.
          """
          cache_file = self.cache.get(requirement)
          if cache_file:
              if self.needs_invalidation(requirement, cache_file):
                  logger.info("Invalidating old %s binary (source has changed) ..", requirement)
                  cache_file = None
          else:
              logger.debug("%s hasn't been cached yet, doing so now.", requirement)
          if not cache_file:
              # Build the binary distribution.
              try:
                  raw_file = self.build_binary_dist(requirement)
              except BuildFailed:
                  logger.warning("Build of %s failed, checking for missing dependencies ..", requirement)
                  if self.system_package_manager.install_dependencies(requirement):
                      raw_file = self.build_binary_dist(requirement)
                  else:
                      raise
              # Transform the binary distribution archive into a form that we can re-use.
              fd, transformed_file = tempfile.mkstemp(prefix='pip-accel-bdist-', suffix='.tar.gz')
              try:
                  archive = tarfile.open(transformed_file, 'w:gz')
                  try:
                      for member, from_handle in self.transform_binary_dist(raw_file):
                          archive.addfile(member, from_handle)
                  finally:
                      archive.close()
                  # Push the binary distribution archive to all available backends.
                  with open(transformed_file, 'rb') as handle:
                      self.cache.put(requirement, handle)
              finally:
                  # Close file descriptor before removing the temporary file.
                  # Without closing Windows is complaining that the file cannot
                  # be removed because it is used by another process.
                  os.close(fd)
                  # Cleanup the temporary file.
                  os.remove(transformed_file)
              # Get the absolute pathname of the file in the local cache.
              cache_file = self.cache.get(requirement)
              # Enable checksum based cache invalidation.
              self.persist_checksum(requirement, cache_file)
          archive = tarfile.open(cache_file, 'r:gz')
          try:
              for member in archive.getmembers():
                  yield member, archive.extractfile(member.name)
          finally:
              archive.close()