安装dask[complete]后调用to_dataset_dict报dask无system属性错误如何解决
错误含义
这个AttributeError: module 'dask' has no attribute 'system'报错的核心原因是依赖包版本不兼容:
你安装的dask 2.0.0属于较早的版本,dask.system.CPU_COUNT这个API是dask 2.1.0版本才正式加入的,你用到的intake-esm包版本较新,在实现to_dataset_dict()方法时调用了这个新版dask才有的属性,在旧版dask环境下运行就会触发属性不存在的报错。此前你看到的“dask必然存在该属性”的结论,默认针对的是2.1.0之后的dask版本,和你当前环境的版本不匹配。
解决方法
按优先级从高到低提供三种可行方案:
- 方案1:升级dask到兼容版本
直接运行以下命令升级dask,安装完成后重启Jupyter内核即可生效:
升级完成后可运行!pip install "dask[complete]>=2.1.0" --userimport dask; print(dask.__version__)确认版本号符合要求,避免加载到集群全局的旧版dask包。 - 方案2:降级intake-esm到适配dask 2.0.0的版本
如果集群环境有约束不能升级dask,可选择降级intake-esm到2020.8.15及之前的版本,该版本的to_dataset_dict()方法不会调用dask.system相关属性:!pip install "intake-esm<=2020.8.15" --user - 方案3:临时补丁方案
不想修改已安装的包版本时,可在调用to_dataset_dict()之前手动给dask补上缺失的属性,代码如下:import os import dask from types import ModuleType # 手动补全dask.system模块 if not hasattr(dask, 'system'): dask.system = ModuleType('system') dask.system.CPU_COUNT = os.cpu_count()
内容的提问来源于stack exchange,提问作者maddie
相关产品推荐
相关产品推荐

