docs: def main(
      output_file: str,
      entry_point: Optional[str],
      console_script: Optional[str],
      python: Optional[str],
      site_packages: Optional[str],
      compressed: bool,
      compile_pyc: bool,
      extend_pythonpath: bool,
      pip_args: List[str],
  ) -> None:
      """
      Shiv is a command line utility for building fully self-contained Python zipapps
      as outlined in PEP 441, but with all their dependencies included!
      """
  
      if not pip_args and not site_packages:
          sys.exit(NO_PIP_ARGS_OR_SITE_PACKAGES)
  
      if output_file is None:
          sys.exit(NO_OUTFILE)
  
      # check for disallowed pip arguments
      for disallowed in DISALLOWED_ARGS:
          for supplied_arg in pip_args:
              if supplied_arg in disallowed:
                  sys.exit(
                      DISALLOWED_PIP_ARGS.format(
                          arg=supplied_arg, reason=DISALLOWED_ARGS[disallowed]
                      )
                  )
  
      with TemporaryDirectory() as working_path:
          tmp_site_packages = Path(working_path, "site-packages")
  
          if site_packages:
              shutil.copytree(site_packages, tmp_site_packages)
  
          if pip_args:
              # install deps into staged site-packages
              pip.install(["--target", str(tmp_site_packages)] + list(pip_args))
  
          # if entry_point is a console script, get the callable
          if entry_point is None and console_script is not None:
              try:
                  entry_point = find_entry_point(tmp_site_packages, console_script)
  
              except KeyError:
                  if not Path(tmp_site_packages, "bin", console_script).exists():
                      sys.exit(NO_ENTRY_POINT.format(entry_point=console_script))
  
          # create runtime environment metadata
          env = Environment(
              build_id=str(uuid.uuid4()),
              entry_point=entry_point,
              script=console_script,
              compile_pyc=compile_pyc,
              extend_pythonpath=extend_pythonpath,
          )
  
          Path(working_path, "environment.json").write_text(env.to_json())
  
          # create bootstrapping directory in working path
          bootstrap_target = Path(working_path, "_bootstrap")
          bootstrap_target.mkdir(parents=True, exist_ok=True)
  
          # copy bootstrap code
          copy_bootstrap(bootstrap_target)
  
          # create the zip
          builder.create_archive(
              Path(working_path),
              target=Path(output_file).expanduser(),
              interpreter=python or _interpreter_path(),
              main="_bootstrap:bootstrap",
              compressed=compressed,
          )