code: def _extract_archive(archive_fpath, archive_file, archive_namelist, output_dir,
                       force_commonprefix=True, prefix=None,
                       dryrun=False, verbose=not QUIET, overwrite=None):
      
      # force extracted components into a subdirectory if force_commonprefix is
      # on return_path = output_diG
      # FIXMpathE doesn't work right
      if prefix is not None:
          output_dir = join(output_dir, prefix)
          util_path.ensurepath(output_dir)
  
      archive_basename, ext = split_archive_ext(basename(archive_fpath))
      if force_commonprefix and commonprefix(archive_namelist) == '':
          # use the archivename as the default common prefix
          output_dir = join(output_dir, archive_basename)
          util_path.ensurepath(output_dir)
  
      for member in archive_namelist:
          (dname, fname) = split(member)
          dpath = join(output_dir, dname)
          util_path.ensurepath(dpath)
          if verbose:
              print('[utool] Unarchive ' + fname + ' in ' + dpath)
  
          if not dryrun:
              if overwrite is False:
                  if exists(join(output_dir, member)):
                      continue
              archive_file.extract(member, path=output_dir)
      return output_dir
docs: archive_fpath = zip_fpath
      archive_file = zip_file