You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xarray加载NetCDF文件时触发InvalidVersion版本错误求助

问题:xarray加载NC文件后操作时报InvalidVersion: Invalid version: 'unknown'

用以下代码加载.nc格式文件:

ds = xr.open_dataset('path/to/file.nc')

加载初期未出现报错,但尝试操作(比如直接打印ds)或可视化数据时,弹出完整错误栈如下:

InvalidVersion                            Traceback (most recent call last)
File ~\anaconda3\Lib\site-packages\IPython\core\formatters.py:406, in BaseFormatter.__call__(self, obj)
    404     method = get_real_method(obj, self.print_method)
    405     if method is not None:
--> 406         return method()
    407     return None
    408 else:

File ~\anaconda3\Lib\site-packages\xarray\core\dataset.py:2436, in Dataset._repr_html_(self)
   2434 if OPTIONS["display_style"] == "text":
   2435     return f"<pre>{escape(repr(self))}</pre>"
-> 2436 return formatting_html.dataset_repr(self)

File ~\anaconda3\Lib\site-packages\xarray\core\formatting_html.py:377, in dataset_repr(ds)
    374 sections.append(dim_section(ds))
    376 if ds.coords:
--> 377     sections.append(coord_section(ds.coords))
    379 sections.append(datavar_section(ds.data_vars))
    381 display_default_indexes = _get_boolean_with_default(
    382     "display_default_indexes", False
    383 )

File ~\anaconda3\Lib\site-packages\xarray\core\formatting_html.py:225, in _mapping_section(mapping, name, details_func, max_items_collapse, expand_option_name, enabled, **kwargs)
    218 expanded = max_items_collapse is None or _get_boolean_with_default(
    219     expand_option_name, n_items < max_items_collapse
    220 )
    221 collapsed = not expanded
    223 return collapsible_section(
    224     f"{name}:",
--> 225     details=details_func(mapping, **kwargs),
    226     n_items=n_items,
    227     enabled=enabled,
    228     collapsed=collapsed,
    229 )

File ~\anaconda3\Lib\site-packages\xarray\core\formatting_html.py:127, in summarize_coords(variables)
    123 dim_ordered_coords = sorted(
    124     variables.items(), key=partial(_coord_sort_key, dims=dims)
    125 )
    126 for k, v in dim_ordered_coords:
--> 127     li_content = summarize_variable(k, v, is_index=k in variables.xindexes)
    128     li_items.append(f"<li class='xr-var-item'>{li_content}</li>")
    130 vars_li = "".join(li_items)

File ~\anaconda3\Lib\site-packages\xarray\core\formatting_html.py:96, in summarize_variable(name, var, is_index, dtype)
     93 data_id = "data-" + str(uuid.uuid4())
     94 disabled = "" if len(var.attrs) else "disabled"
---> 96 preview = escape(inline_variable_array_repr(variable, 35))
     97 attrs_ul = summarize_attrs(var.attrs)
     98 data_repr = short_data_repr_html(variable)

File ~\anaconda3\Lib\site-packages\xarray\core\formatting.py:316, in inline_variable_array_repr(var, max_width)
    314 if getattr(var, "_in_memory", False):
    315     return format_array_flat(var, max_width)
--> 316 dask_array_type = array_type("dask")
    317 if isinstance(var._data, dask_array_type):
    318     return inline_dask_repr(var.data)

File ~\anaconda3\Lib\site-packages\xarray\namedarray\pycompat.py:83, in array_type(mod)
     81 def array_type(mod: ModType) -> DuckArrayTypes:
     82     """Quick wrapper to get the array class of the module."""
---> 83     return _get_cached_duck_array_module(mod).type

File ~\anaconda3\Lib\site-packages\xarray\namedarray\pycompat.py:74, in _get_cached_duck_array_module(mod)
     72 def _get_cached_duck_array_module(mod: ModType) -> DuckArrayModule:
     73     if mod not in _cached_duck_array_modules:
---> 74         duckmod = DuckArrayModule(mod)
     75         _cached_duck_array_modules[mod] = duckmod
     76         return duckmod

File ~\anaconda3\Lib\site-packages\xarray\namedarray\pycompat.py:40, in DuckArrayModule.__init__(self, mod)
     38 try:
     39     duck_array_module = import_module(mod)
---> 40     duck_array_version = Version(duck_array_module.__version__)
     42     if mod == "dask":
     43         duck_array_type = (import_module("dask.array").Array,)

File ~\anaconda3\Lib\site-packages\packaging\version.py:202, in Version.__init__(self, version)
    200 match = self._regex.search(version)
    201 if not match:
--> 202     raise InvalidVersion(f"Invalid version: {version!r}")
    204 # Store the parsed out pieces of the version
    205 self._version = _Version(
    206     epoch=int(match.group("epoch")) if match.group("epoch") else 0,
    207     release=tuple(int(i) for i in match.group("release").split(".")),
   (...)    213     local=_parse_local_version(match.group("local")),
    214 )

InvalidVersion: Invalid version: 'unknown'

已尝试查找相关解决方案,但未找到相同报错案例,特此求助。


解决方案

这个错误的根源是xarray在解析依赖库的版本号时,该库的__version__字段为'unknown',不符合packaging库的版本格式要求。从错误栈来看,触发点是xarray检查dask的版本,大概率是dask的版本标识异常。

可按以下步骤排查解决:

  • 检查dask版本
    在终端运行命令确认dask版本情况:

    pip show dask
    

    若输出中Version为unknown,说明dask安装包存在异常。

  • 重新安装dask
    卸载现有dask后重新安装官方稳定版本:

    pip uninstall -y dask
    pip install dask
    

    若使用conda环境,建议用conda命令操作:

    conda remove -y dask
    conda install dask
    
  • 临时规避方案(无法重新安装时)
    手动覆盖dask的__version__字段为符合格式的版本号:

    import dask
    dask.__version__ = "2024.1.0"  # 填写任意合法版本号即可
    import xarray as xr
    ds = xr.open_dataset('path/to/file.nc')
    
  • 排查其他依赖库
    若重新安装dask后问题依旧,检查numpy、cupy等xarray依赖的数组库版本标识是否异常,重复上述步骤处理。


内容的提问来源于stack exchange,提问作者Ramiro chalar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 20:17:30