Skip to content

Iris fails to load (simple, raw) when Xarray is not installed (due to Dask mismanagement of import) #6723

@valeriupredoi

Description

@valeriupredoi

📰 Custom Issue

Hi folks, a quick one, as a heads up, with apologies I don't have time to investigate further inside Dask: am trying to load an NetCDF4 file (really don't matter which, it's CORDEX data), and am just using iris.load or iris.load_raw, in a conda env with iris 3.13.1 and dask 2025.9.1 but no xarray in it, and am getting this:

Traceback (most recent call last):
  File "/home/valeriu/test_buffer_local.py", line 25, in <module>
    c = iris.load_raw("da193a_25_6hr_t_pt_cordex__198807-198807.nc")
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/iris/loading.py", line 285, in load_raw
    return _load_collection(uris, constraints, callback).cubes()
           ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/iris/loading.py", line 137, in _load_collection
    result = _CubeFilterCollection.from_cubes(cubes, constraints)
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/iris/loading.py", line 93, in from_cubes
    for c in cubes:
             ^^^^^
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/iris/loading.py", line 34, in _generate_cubes
    for cube in iris.io.load_files(part_names, callback, constraints):
                ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/iris/io/__init__.py", line 218, in load_files
    for cube in handling_format_spec.handler(fnames, callback, constraints):
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/iris/fileformats/netcdf/loader.py", line 733, in load_cubes
    cube = _load_cube(engine, cf, cf_var, cf.filename)
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/iris/fileformats/netcdf/loader.py", line 388, in _load_cube
    return _load_cube_inner(engine, cf, cf_var, filename)
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/iris/fileformats/netcdf/loader.py", line 395, in _load_cube_inner
    data = _get_cf_var_data(cf_var)
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/iris/fileformats/netcdf/loader.py", line 348, in _get_cf_var_data
    result = as_lazy_data(
        proxy,
    ...<2 lines>...
        dims_fixed=tuple(dims_fixed),
    )
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/iris/_lazy_data.py", line 342, in as_lazy_data
    result = da.from_array(data, chunks=chunks, asarray=asarray, meta=meta)
  File "/home/valeriu/miniconda3/envs/cmip7repack/lib/python3.13/site-packages/dask/array/core.py", line 3643, in from_array
    if xr is not None and isinstance(x, xr.DataArray) and x.chunks is not None:
                                        ^^^^^^^^^^^^
AttributeError: module 'xarray' has no attribute 'DataArray'

that's because good ole Dask fails to identify that xr is not really an imported package, yest still tries to access that DataArray "attribute".

Everything works fine after I install xarray.

A nod to you if you want to ping Dask, or do something about it 🍻

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions