diff --git a/xarray/backends/plugins.py b/xarray/backends/plugins.py index 97455d8acc0..6e1784af5b6 100644 --- a/xarray/backends/plugins.py +++ b/xarray/backends/plugins.py @@ -215,15 +215,21 @@ def guess_engine( def get_backend(engine: str | type[BackendEntrypoint]) -> BackendEntrypoint: """Select open_dataset method based on current engine.""" if isinstance(engine, str): - engines = list_engines() - if engine not in engines: - raise ValueError( - f"unrecognized engine '{engine}' must be one of your download engines: {list(engines)}. " - "To install additional dependencies, see:\n" - "https://docs.xarray.dev/en/stable/user-guide/io.html \n" - "https://docs.xarray.dev/en/stable/getting-started-guide/installing.html" - ) - backend = engines[engine] + if engine in BACKEND_ENTRYPOINTS: + # fast path for built-in engines + backend_cls = BACKEND_ENTRYPOINTS[engine][1] + set_missing_parameters({engine: backend_cls}) + backend = backend_cls() + else: + engines = list_engines() + if engine not in engines: + raise ValueError( + f"unrecognized engine '{engine}' must be one of your download engines: {list(engines)}. " + "To install additional dependencies, see:\n" + "https://docs.xarray.dev/en/stable/user-guide/io.html \n" + "https://docs.xarray.dev/en/stable/getting-started-guide/installing.html" + ) + backend = engines[engine] elif issubclass(engine, BackendEntrypoint): backend = engine() else: