code: def load_build_configuration_from_source(build_configuration, backends=None):
    
    # pants.build_graph and pants.core_task must always be loaded, and before any other backends.
    # TODO: Consider replacing the "backend" nomenclature here. pants.build_graph and
    # pants.core_tasks aren't really backends.
    backend_packages = OrderedSet(['pants.build_graph', 'pants.core_tasks'] + (backends or []))
    for backend_package in backend_packages:
      load_backend(build_configuration, backend_package)
docs: Installs pants backend packages to provide BUILD file symbols and cli goals.
  
    :param BuildConfiguration build_configuration: The BuildConfiguration (for adding aliases).
    :param backends: An optional list of additional packages to load backends from.
    :raises: :class:``pants.base.exceptions.BuildConfigurationError`` if there is a problem loading
      the build configuration.