code: def prepare_local_env(self, ray_wheels_url: Optional[str] = None):
      if not os.environ.get("BUILDKITE"):
          return
  
      # Install matching Ray for job submission
      try:
          install_matching_ray_locally(
              ray_wheels_url or os.environ.get("RAY_WHEELS", None)
          )
      except Exception as e:
          raise LocalEnvSetupError(
              f"Error setting up local environment: {e}"
          ) from e
  
imports: import json
  import os
  import tempfile
  from typing import TYPE_CHECKING, Any, Dict, Optional
  from ray_release.cluster_manager.cluster_manager import ClusterManager
  from ray_release.command_runner.command_runner import CommandRunner
  from ray_release.exception import ClusterNodesWaitTimeout, CommandError, CommandTimeout, LocalEnvSetupError, LogsError, FetchResultError
  from ray_release.file_manager.file_manager import FileManager
  from ray_release.job_manager import JobManager
  from ray_release.logger import logger
  from ray_release.util import format_link, get_anyscale_sdk
  from ray_release.wheels import install_matching_ray_locally
label_desc: Use image node_id 2 for calling the JobRunner obj's underlying member method code with example usage: obj.prepare_local_env(ray_wheels_url) without return types