scikit-kbio引发ImportError:无法从scipy.stats导入ConstantInputWarning
scikit-bio导入错误解决方法:无法从scipy.stats导入ConstantInputWarning
错误信息
ImportError: cannot import name 'ConstantInputWarning' from 'scipy.stats' (/home/smith/miniconda3/lib/python3.8/site-packages/scipy/stats/__init__.py)
环境版本
- Python:3.8
- scipy:1.8.1
- numpy:1.22.4
- skbio:0.5.9
问题原因
近期安装numba等软件时,可能间接升级了scipy版本。skbio 0.5.9的代码依赖旧版scipy的模块结构——ConstantInputWarning在scipy 1.7.x及之前属于scipy.stats公开模块,但scipy 1.8.x版本将其移至scipy.stats._stats_py私有模块,旧版skbio仍从原路径导入,导致报错。
解决方法
方法1:降级scipy到兼容版本
直接将scipy降级到skbio 0.5.9支持的版本(如1.7.3),执行以下命令:
# 使用pip pip install scipy==1.7.3 # 若使用conda环境 conda install scipy=1.7.3
方法2:修改skbio导入代码(临时应急)
找到skbio中涉及ConstantInputWarning导入的文件(例如skbio/stats/ordination/_utils.py),将导入语句:
from scipy.stats import ConstantInputWarning
替换为:
from scipy.stats._stats_py import ConstantInputWarning
注意需修改所有相关导入的文件,此方法适合临时解决,但skbio更新后会覆盖修改。
方法3:更新skbio到最新兼容版本
检查并升级skbio至支持scipy 1.8.x的版本,执行命令:
# 使用pip pip install --upgrade scikit-bio # 若使用conda环境 conda update scikit-bio
升级前确认新版本对Python、numpy等依赖的要求是否与当前环境兼容。
内容的提问来源于stack exchange,提问作者Roger V.
相关产品推荐
相关产品推荐

