code: def fetch_build_egg(dist, req):
      """Fetch an egg needed for building.
  
      Use pip/wheel to fetch/build a wheel."""
      # Check pip is available.
      try:
          pkg_resources.get_distribution("pip")
      except pkg_resources.DistributionNotFound:
          dist.announce(
              "WARNING: The pip package is not available, falling back "
              "to EasyInstall for handling setup_requires/test_requires; "
              "this is deprecated and will be removed in a future version.",
              log.WARN,
          )
          return _legacy_fetch_build_egg(dist, req)
      # Warn if wheel is not.
      try:
          pkg_resources.get_distribution("wheel")
      except pkg_resources.DistributionNotFound:
          dist.announce(
              "WARNING: The wheel package is not available.", log.WARN
          )
      # Ignore environment markers; if supplied, it is required.
      req = strip_marker(req)
      # Take easy_install options into account, but do not override relevant
      # pip environment variables (like PIP_INDEX_URL or PIP_QUIET); they'll
      # take precedence.
      opts = dist.get_option_dict("easy_install")
      if "allow_hosts" in opts:
          raise DistutilsError(
              "the `allow-hosts` option is not supported "
              "when using pip to install requirements."
          )
      if "PIP_QUIET" in os.environ or "PIP_VERBOSE" in os.environ:
          quiet = False
      else:
          quiet = True
      if "PIP_INDEX_URL" in os.environ:
          index_url = None
      elif "index_url" in opts:
          index_url = opts["index_url"][1]
      else:
          index_url = None
      if "find_links" in opts:
          find_links = _fixup_find_links(opts["find_links"][1])[:]
      else:
          find_links = []
      if dist.dependency_links:
          find_links.extend(dist.dependency_links)
      eggs_dir = os.path.realpath(dist.get_egg_cache_dir())
      environment = pkg_resources.Environment()
      for egg_dist in pkg_resources.find_distributions(eggs_dir):
          if egg_dist in req and environment.can_add(egg_dist):
              return egg_dist
      with TemporaryDirectory() as tmpdir:
          cmd = [
              sys.executable,
              "-m",
              "pip",
              "--disable-pip-version-check",
              "wheel",
              "--no-deps",
              "-w",
              tmpdir,
          ]
          if quiet:
              cmd.append("--quiet")
          if index_url is not None:
              cmd.extend(("--index-url", index_url))
          if find_links is not None:
              for link in find_links:
                  cmd.extend(("--find-links", link))
          # If requirement is a PEP 508 direct URL, directly pass
          # the URL to pip, as `req @ url` does not work on the
          # command line.
          if req.url:
              cmd.append(req.url)
          else:
              cmd.append(str(req))
          try:
              subprocess.check_call(cmd)
          except subprocess.CalledProcessError as e:
              raise DistutilsError(str(e))
          wheel = Wheel(glob.glob(os.path.join(tmpdir, "*.whl"))[0])
          dist_location = os.path.join(eggs_dir, wheel.egg_name())
          wheel.install_as_egg(dist_location)
          dist_metadata = pkg_resources.PathMetadata(
              dist_location, os.path.join(dist_location, "EGG-INFO")
          )
          dist = pkg_resources.Distribution.from_filename(
              dist_location, metadata=dist_metadata
          )
          return dist
  
file_path: catboost/contrib/python/setuptools/py2/setuptools/installer.py
imports: import glob
  import os
  import subprocess
  import sys
  from distutils import log
  from distutils.errors import DistutilsError
  import pkg_resources
  from setuptools.command.easy_install import easy_install
  from setuptools.extern import six
  from setuptools.wheel import Wheel
  from .py31compat import TemporaryDirectory
label_desc: Use image node_id 3 for calling a global function with example usage: fetch_build_egg(dist, req) and returns: dist, _legacy_fetch_build_egg, egg_dist