code: def read_from_environment_manifest(self, keys):
      path = self.get_environment_manifest_path()
      if os.path.exists(path) and os.path.getsize(path) > 0:
          with open(path) as f:
              data = json.load(f)
              for key in keys:
                  try:
                      data = data[key]
                  except KeyError:
                      return None
              return data
  
imports: import copy
  import errno
  import fcntl
  import functools
  import io
  import json
  import os
  import sys
  import time
  from concurrent.futures import ThreadPoolExecutor
  from hashlib import sha256
  from io import BufferedIOBase
  from itertools import chain
  from urllib.parse import unquote, urlparse
  import requests
  from metaflow.exception import MetaflowException
  from metaflow.metaflow_config import get_pinned_conda_libs
  from metaflow.metaflow_environment import MetaflowEnvironment
  from metaflow.metaflow_profile import profile
  from .None import MAGIC_FILE, _datastore_packageroot
  from .utils import conda_platform
label_desc: Use image node_id 15 for calling the CondaEnvironment obj's underlying member method code with example usage: obj.read_from_environment_manifest(keys) and returns: data, None