code: def __init__(self, marker: str) -> None:
      # Note: We create a Marker object without calling this constructor in
      #       packaging.requirements.Requirement. If any additional logic is
      #       added here, make sure to mirror/adapt Requirement.
      try:
          self._markers = _normalize_extra_values(parse_marker(marker))
          # The attribute `_markers` can be described in terms of a recursive type:
          # MarkerList = List[Union[Tuple[Node, ...], str, MarkerList]]
          #
          # For example, the following expression:
          # python_version > "3.6" or (python_version == "3.6" and os_name == "unix")
          #
          # is parsed into:
          # [
          #     (<Variable('python_version')>, <Op('>')>, <Value('3.6')>),
          #     'and',
          #     [
          #         (<Variable('python_version')>, <Op('==')>, <Value('3.6')>),
          #         'or',
          #         (<Variable('os_name')>, <Op('==')>, <Value('unix')>)
          #     ]
          # ]
      except ParserSyntaxError as e:
          raise InvalidMarker(str(e)) from e
  
imports: import operator
  import os
  import platform
  import sys
  from typing import Any, Callable, Dict, List, Optional, Tuple, Union
  from ._parser import MarkerAtom, MarkerList, Op, Value, Variable, parse_marker
  from ._tokenizer import ParserSyntaxError
  from .specifiers import InvalidSpecifier, Specifier
  from .utils import canonicalize_name
label_desc: Use image node_id 1 to create a new Marker object  with example: obj = Marker(marker)