code: def get_environment_info(self, include_ext_info=False):
      global version_cache
      if version_cache is None:
          version_cache = metaflow_version.get_version()
  
      # note that this dict goes into the code package
      # so variables here should be relatively stable (no
      # timestamps) so the hash won't change all the time
      env = {
          "platform": platform.system(),
          "username": get_username(),
          "production_token": os.environ.get(
              "METAFLOW_PRODUCTION_TOKEN"
          ),
          "runtime": os.environ.get("METAFLOW_RUNTIME_NAME", "dev"),
          "app": os.environ.get("APP"),
          "environment_type": self.TYPE,
          "use_r": R.use_r(),
          "python_version": sys.version,
          "python_version_code": "%d.%d.%d" % sys.version_info[:3],
          "metaflow_version": version_cache,
          "script": os.path.basename(os.path.abspath(sys.argv[0])),
      }
      if R.use_r():
          env["metaflow_r_version"] = R.metaflow_r_version()
          env["r_version"] = R.r_version()
          env["r_version_code"] = R.r_version_code()
      if include_ext_info:
          # Information about extension modules (to load them in the proper order)
          ext_key, ext_val = dump_module_info()
          env[ext_key] = ext_val
      return env
  
imports: import os
  import platform
  import sys
  from .util import get_username
  from .None import metaflow_version
  from metaflow.exception import MetaflowException
  from metaflow.extension_support import dump_module_info
  from metaflow.mflog import BASH_MFLOG
  from .None import R
label_desc: Use image node_id 12 for calling the MetaflowEnvironment obj's underlying member method code with example usage: obj.get_environment_info(include_ext_info) and returns: env