class_docstr: This class is intended for modeling the bentofile.yaml file where user will
  provide all the options for building a Bento. All optional build options should be
  default to None so it knows which fields are NOT SET by the user provided config,
  which makes it possible to omitted unset fields when writing a BentoBuildOptions to
  a yaml file for future use. This also applies to nested options such as the
  DockerOptions class and the PythonOptions class.
class_docstr_tok: ["This","class","is","intended","for","modeling","the","bentofile.yaml","file","where","user","will","provide","all","the","options","for","building","a","Bento",".","All","optional","build","options","should","be","default","to","None","so","it","knows","which","fields","are","NOT","SET","by","the","user","provided","config",",","which","makes","it","possible","to","omitted","unset","fields","when","writing","a","BentoBuildOptions","to","a","yaml","file","for","future","use",".","This","also","applies","to","nested","options","such","as","the","DockerOptions","class","and","the","PythonOptions","class","."]
code: def to_yaml(self, stream: t.TextIO) -> None:
      try:
          yaml.dump(bentoml_cattr.unstructure(self), stream)
      except yaml.YAMLError as e:
          logger.error(
              "Error while deserializing BentoBuildConfig to yaml:"
          )
          logger.error(e)
          raise
  
imports: from __future__ import annotations
  import logging
  import os
  import re
  import subprocess
  import sys
  import typing
  from shlex import quote
  from sys import version_info
  import attr
  import fs
  import fs.copy
  import psutil
  import yaml
  from pathspec import PathSpec
  from ...exceptions import BentoMLException
  from ...exceptions import InvalidArgument
  from ..configuration import BENTOML_VERSION
  from ..configuration import clean_bentoml_version
  from ..configuration import get_quiet_mode
  from ..container import generate_containerfile
  from ..container.frontend.dockerfile import ALLOWED_CUDA_VERSION_ARGS
  from ..container.frontend.dockerfile import CONTAINER_SUPPORTED_DISTROS
  from ..container.frontend.dockerfile import SUPPORTED_CUDA_VERSIONS
  from ..container.frontend.dockerfile import DistroSpec
  from ..container.frontend.dockerfile import get_supported_spec
  from ..container.generate import BENTO_PATH
  from ..utils import bentoml_cattr
  from ..utils import copy_file_to_fs_folder
  from ..utils import resolve_user_filepath
  from ..utils.dotenv import parse_dotenv
  from .build_dev_bentoml_whl import build_bentoml_editable_wheel
label_desc: Use image node_id 5 for calling the BentoBuildConfig obj's underlying member method code with example usage: obj.to_yaml(stream) without return types