class_docstr: Parse a requirement.
  
  Parse a given requirement string into its parts, such as name, specifier,
  URL, and extras. Raises InvalidRequirement on a badly-formed requirement
  string.
code: def __str__(self):
      parts = [self.name]
  
      if self.extras:
          parts.append("[{0}]".format(",".join(sorted(self.extras))))
  
      if self.specifier:
          parts.append(str(self.specifier))
  
      if self.url:
          parts.append("@ {0}".format(self.url))
  
      if self.marker:
          parts.append("; {0}".format(self.marker))
  
      return "".join(parts)
  
file_path: catboost/contrib/python/setuptools/py2/pkg_resources/_vendor/packaging/requirements.py
imports: from __future__ import absolute_import, division, print_function
  import string
  import re
  from pkg_resources.extern.pyparsing import stringStart, stringEnd, originalTextFor, ParseException
  from pkg_resources.extern.pyparsing import ZeroOrMore, Word, Optional, Regex, Combine
  from pkg_resources.extern.pyparsing import Literal
  from pkg_resources.extern.six.moves.urllib import parse
  from .markers import MARKER_EXPR, Marker
  from .specifiers import LegacySpecifier, Specifier, SpecifierSet
label_desc: Use image node_id 2 for calling the Requirement obj's underlying member method code with example usage: obj.__str__() and returns: str