class_docstr: This class is used to define a runtime environment for a job, task,
  or actor.
  
  See :ref:`runtime-environments` for detailed documentation.
  
  This class can be used interchangeably with an unstructured dictionary
  in the relevant API calls.
  
  Can specify a runtime environment whole job, whether running a script
  directly on the cluster, using Ray Job submission, or using Ray Client:
  
  .. code-block:: python
  
      from ray.runtime_env import RuntimeEnv
      # Starting a single-node local Ray cluster
      ray.init(runtime_env=RuntimeEnv(...))
  
  .. code-block:: python
  
      from ray.runtime_env import RuntimeEnv
      # Connecting to remote cluster using Ray Client
      ray.init("ray://123.456.7.89:10001", runtime_env=RuntimeEnv(...))
  
  Can specify different runtime environments per-actor or per-task using
  ``.options()`` or the ``@ray.remote`` decorator:
  
  .. code-block:: python
  
      from ray.runtime_env import RuntimeEnv
      # Invoke a remote task that will run in a specified runtime environment.
      f.options(runtime_env=RuntimeEnv(...)).remote()
  
      # Instantiate an actor that will run in a specified runtime environment.
      actor = SomeClass.options(runtime_env=RuntimeEnv(...)).remote()
  
      # Specify a runtime environment in the task definition. Future invocations via
      # `g.remote()` will use this runtime environment unless overridden by using
      # `.options()` as above.
      @ray.remote(runtime_env=RuntimeEnv(...))
      def g():
          pass
  
      # Specify a runtime environment in the actor definition. Future instantiations
      # via `MyClass.remote()` will use this runtime environment unless overridden by
      # using `.options()` as above.
      @ray.remote(runtime_env=RuntimeEnv(...))
      class MyClass:
          pass
  
  Here are some examples of RuntimeEnv initialization:
  
  .. code-block:: python
  
      # Example for using conda
      RuntimeEnv(conda={
          "channels": ["defaults"], "dependencies": ["codecov"]})
      RuntimeEnv(conda="pytorch_p36")   # Found on DLAMIs
  
      # Example for using container
      RuntimeEnv(
          container={"image": "anyscale/ray-ml:nightly-py38-cpu",
          "worker_path": "/root/python/ray/_private/workers/default_worker.py",
          "run_options": ["--cap-drop SYS_ADMIN","--log-level=debug"]})
  
      # Example for set env_vars
      RuntimeEnv(env_vars={"OMP_NUM_THREADS": "32", "TF_WARNINGS": "none"})
  
      # Example for set pip
      RuntimeEnv(
          pip={"packages":["tensorflow", "requests"], "pip_check": False,
          "pip_version": "==22.0.2;python_version=='3.8.11'"})
  
  Args:
      py_modules: List of URIs (either in the GCS or external
          storage), each of which is a zip file that will be unpacked and
          inserted into the PYTHONPATH of the workers.
      working_dir: URI (either in the GCS or external storage) of a zip
          file that will be unpacked in the directory of each task/actor.
      pip: Either a list of pip packages, a string
          containing the path to a pip requirements.txt file, or a python
          dictionary that has three fields: 1) ``packages`` (required, List[str]): a
          list of pip packages, 2) ``pip_check`` (optional, bool): whether enable
          pip check at the end of pip install, defaults to False.
          3) ``pip_version`` (optional, str): the version of pip, Ray will spell
          the package name "pip" in front of the ``pip_version`` to form the final
          requirement string, the syntax of a requirement specifier is defined in
          full in PEP 508.
      conda: Either the conda YAML config, the name of a
          local conda env (e.g., "pytorch_p36"), or the path to a conda
          environment.yaml file.
          The Ray dependency will be automatically injected into the conda
          env to ensure compatibility with the cluster Ray. The conda name
          may be mangled automatically to avoid conflicts between runtime
          envs.
          This field cannot be specified at the same time as the 'pip' field.
          To use pip with conda, please specify your pip dependencies within
          the conda YAML config:
          https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#create-env-file-manually
      container: Require a given (Docker) container image,
          The Ray worker process will run in a container with this image.
          The `worker_path` is the default_worker.py path.
          The `run_options` list spec is here:
          https://docs.docker.com/engine/reference/run/
      env_vars: Environment variables to set.
      worker_process_setup_hook: (Experimental) The setup hook that's
          called after workers start and before Tasks and Actors are scheduled.
          A module name (string type) or callable (function) can be passed.
          When a module name is passed, Ray worker should be able to access the
          module name. When a callable is passed, callable should be serializable.
          When a runtime env is specified by job submission API,
          only a module name (string) is allowed.
      nsight: Dictionary mapping nsight profile option name to it's value.
      config: config for runtime environment. Either
          a dict or a RuntimeEnvConfig. Field: (1) setup_timeout_seconds, the
          timeout of runtime environment creation,  timeout is in seconds.
class_docstr_tok: ["This","class","is","used","to","define","a","runtime","environment","for","a","job",",","task",",","or","actor",".","See",":","ref",":","`","runtime-environments","`","for","detailed","documentation",".","This","class","can","be","used","interchangeably","with","an","unstructured","dictionary","in","the","relevant","API","calls",".","Can","specify","a","runtime","environment","whole","job",",","whether","running","a","script","directly","on","the","cluster",",","using","Ray","Job","submission",",","or","using","Ray","Client",":","..","code-block",":",":","python","from","ray.runtime_env","import","RuntimeEnv","#","Starting","a","single-node","local","Ray","cluster","ray.init","(","runtime_env=RuntimeEnv","(","...",")",")","..","code-block",":",":","python","from","ray.runtime_env","import","RuntimeEnv","#","Connecting","to","remote","cluster","using","Ray","Client","ray.init","(","``","ray",":","\/\/123.456.7.89:10001","''",",","runtime_env=RuntimeEnv","(","...",")",")","Can","specify","different","runtime","environments","per-actor","or","per-task","using","``",".options","(",")","``","or","the","``","@","ray.remote","``","decorator",":","..","code-block",":",":","python","from","ray.runtime_env","import","RuntimeEnv","#","Invoke","a","remote","task","that","will","run","in","a","specified","runtime","environment",".","f.options","(","runtime_env=RuntimeEnv","(","...",")",")",".remote","(",")","#","Instantiate","an","actor","that","will","run","in","a","specified","runtime","environment",".","actor","=","SomeClass.options","(","runtime_env=RuntimeEnv","(","...",")",")",".remote","(",")","#","Specify","a","runtime","environment","in","the","task","definition",".","Future","invocations","via","#","`","g.remote","(",")","`","will","use","this","runtime","environment","unless","overridden","by","using","#","`",".options","(",")","`","as","above",".","@","ray.remote","(","runtime_env=RuntimeEnv","(","...",")",")","def","g","(",")",":","pass","#","Specify","a","runtime","environment","in","the","actor","definition",".","Future","instantiations","#","via","`","MyClass.remote","(",")","`","will","use","this","runtime","environment","unless","overridden","by","#","using","`",".options","(",")","`","as","above",".","@","ray.remote","(","runtime_env=RuntimeEnv","(","...",")",")","class","MyClass",":","pass","Here","are","some","examples","of","RuntimeEnv","initialization",":","..","code-block",":",":","python","#","Example","for","using","conda","RuntimeEnv","(","conda=","{","``","channels","''",":","[","``","defaults","''","]",",","``","dependencies","''",":","[","``","codecov","''","]","}",")","RuntimeEnv","(","conda=","''","pytorch_p36","''",")","#","Found","on","DLAMIs","#","Example","for","using","container","RuntimeEnv","(","container=","{","``","image","''",":","``","anyscale\/ray-ml",":","nightly-py38-cpu","''",",","``","worker_path","''",":","``","\/root\/python\/ray\/_private\/workers\/default_worker.py","''",",","``","run_options","''",":","[","``","--","cap-drop","SYS_ADMIN","''",",","''","--","log-level=debug","''","]","}",")","#","Example","for","set","env_vars","RuntimeEnv","(","env_vars=","{","``","OMP_NUM_THREADS","''",":","``","32","''",",","``","TF_WARNINGS","''",":","``","none","''","}",")","#","Example","for","set","pip","RuntimeEnv","(","pip=","{","``","packages","''",":","[","``","tensorflow","''",",","``","requests","''","]",",","``","pip_check","''",":","False",",","``","pip_version","''",":","``","==22.0.2",";","python_version==","'","3.8.11","'","''","}",")","Args",":","py_modules",":","List","of","URIs","(","either","in","the","GCS","or","external","storage",")",",","each","of","which","is","a","zip","file","that","will","be","unpacked","and","inserted","into","the","PYTHONPATH","of","the","workers",".","working_dir",":","URI","(","either","in","the","GCS","or","external","storage",")","of","a","zip","file","that","will","be","unpacked","in","the","directory","of","each","task\/actor",".","pip",":","Either","a","list","of","pip","packages",",","a","string","containing","the","path","to","a","pip","requirements.txt","file",",","or","a","python","dictionary","that","has","three","fields",":","1",")","``","packages","``","(","required",",","List","[","str","]",")",":","a","list","of","pip","packages",",","2",")","``","pip_check","``","(","optional",",","bool",")",":","whether","enable","pip","check","at","the","end","of","pip","install",",","defaults","to","False",".","3",")","``","pip_version","``","(","optional",",","str",")",":","the","version","of","pip",",","Ray","will","spell","the","package","name","``","pip","''","in","front","of","the","``","pip_version","``","to","form","the","final","requirement","string",",","the","syntax","of","a","requirement","specifier","is","defined","in","full","in","PEP","508.","conda",":","Either","the","conda","YAML","config",",","the","name","of","a","local","conda","env","(","e.g.",",","``","pytorch_p36","''",")",",","or","the","path","to","a","conda","environment.yaml","file",".","The","Ray","dependency","will","be","automatically","injected","into","the","conda","env","to","ensure","compatibility","with","the","cluster","Ray",".","The","conda","name","may","be","mangled","automatically","to","avoid","conflicts","between","runtime","envs",".","This","field","can","not","be","specified","at","the","same","time","as","the","'pip","'","field",".","To","use","pip","with","conda",",","please","specify","your","pip","dependencies","within","the","conda","YAML","config",":","https",":","\/\/conda.io\/projects\/conda\/en\/latest\/user-guide\/tasks\/manage-environments.html","#","create-env-file-manually","container",":","Require","a","given","(","Docker",")","container","image",",","The","Ray","worker","process","will","run","in","a","container","with","this","image",".","The","`","worker_path","`","is","the","default_worker.py","path",".","The","`","run_options","`","list","spec","is","here",":","https",":","\/\/docs.docker.com\/engine\/reference\/run\/","env_vars",":","Environment","variables","to","set",".","worker_process_setup_hook",":","(","Experimental",")","The","setup","hook","that's","called","after","workers","start","and","before","Tasks","and","Actors","are","scheduled",".","A","module","name","(","string","type",")","or","callable","(","function",")","can","be","passed",".","When","a","module","name","is","passed",",","Ray","worker","should","be","able","to","access","the","module","name",".","When","a","callable","is","passed",",","callable","should","be","serializable",".","When","a","runtime","env","is","specified","by","job","submission","API",",","only","a","module","name","(","string",")","is","allowed",".","nsight",":","Dictionary","mapping","nsight","profile","option","name","to","it","'s","value",".","config",":","config","for","runtime","environment",".","Either","a","dict","or","a","RuntimeEnvConfig",".","Field",":","(","1",")","setup_timeout_seconds",",","the","timeout","of","runtime","environment","creation",",","timeout","is","in","seconds","."]
code: def to_dict(self) -> Dict:
      runtime_env_dict = dict(deepcopy(self))
  
      # Replace strongly-typed RuntimeEnvConfig with a dict to allow the returned
      # dict to work properly as a field in a dataclass. Details in issue #26986
      if runtime_env_dict.get("config"):
          runtime_env_dict["config"] = runtime_env_dict[
              "config"
          ].to_dict()
  
      return runtime_env_dict
  
imports: import json
  import logging
  import os
  from copy import deepcopy
  from dataclasses import asdict, is_dataclass
  from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union
  import ray
  from ray._private.ray_constants import DEFAULT_RUNTIME_ENV_TIMEOUT_SECONDS
  from ray._private.runtime_env.conda import get_uri
  from ray._private.runtime_env.pip import get_uri
  from ray._private.runtime_env.plugin_schema_manager import RuntimeEnvPluginSchemaManager
  from ray._private.runtime_env.validation import OPTION_TO_VALIDATION_FN
  from ray._private.thirdparty.dacite import from_dict
  from ray.core.generated.runtime_env_common_pb2 import RuntimeEnvConfig
  from ray.util.annotations import PublicAPI
label_desc: Use image node_id 7 for calling the RuntimeEnv obj's underlying member method code with example usage: obj.to_dict() and returns: runtime_env_dict