lifelines包加载失败:scipy.misc无logsumexp属性的解决咨询
解决lifelines导入时的
AttributeError: module 'scipy.misc' has no attribute 'logsumexp'问题 问题重现
你运行的导入代码:
import numpy as np from scipy import stats import pandas as pd from scipy.special import logsumexp from lifelines import KaplanMeierFitter, CoxPHFitter from lifelines.statistics import logrank_test
出现的报错信息:
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-1-2f2a9dd88e46> in <module> 4 from scipy.special import logsumexp ----> 5 from lifelines import KaplanMeierFitter, CoxPHFitter 6 from lifelines.statistics import logrank_test ~/.virtualenvs/stats/lib/python3.7/site-packages/lifelines/__init__.py in <module> 12 from lifelines.fitters.aalen_johansen_fitter import AalenJohansenFitter ---> 13 from lifelines.fitters.log_normal_fitter import LogNormalFitter 14 from lifelines.fitters.log_logistic_fitter import LogLogisticFitter ~/.virtualenvs/stats/lib/python3.7/site-packages/lifelines/fitters/log_normal_fitter.py in <module> 4 import autograd.numpy as np ----> 5 from autograd.scipy.stats import norm 6 from lifelines.fitters import KnownModelParametericUnivariateFitter ~/.virtualenvs/stats/lib/python3.7/site-packages/autograd/scipy/__init__.py in <module> 6 try: ----> 7 from . import misc 8 except ImportError: 9 pass ~/.virtualenvs/stats/lib/python3.7/site-packages/autograd/scipy/misc.py in <module> 5 from autograd.numpy.numpy_vjps import repeat_to_match_shape 6 ----> 7 logsumexp = primitive(scipy.misc.logsumexp) 8 9 def make_grad_logsumexp(ans, x, axis=None, b=1.0, keepdims=False): AttributeError: module 'scipy.misc' has no attribute 'logsumexp'
疑问解答
首先明确:那段出问题的代码不属于SciPy也不属于lifelines,而是来自autograd这个依赖包——它是lifelines依赖的自动微分库,代码在autograd/scipy/misc.py文件里。
你提出的修改方案完全可行,因为SciPy确实在较新版本中将logsumexp从scipy.misc迁移到了scipy.special,修改这一行就能解决版本不兼容的问题,比降级SciPy更简便。
具体修改步骤
找到报错中指向的文件路径:
~/.virtualenvs/stats/lib/python3.7/site-packages/autograd/scipy/misc.py你可以用文本编辑器直接打开这个文件,或者在终端用
vim/nano等工具编辑。定位到第7行左右的代码:
logsumexp = primitive(scipy.misc.logsumexp)将其修改为:
logsumexp = primitive(scipy.special.logsumexp)(可选)如果文件顶部没有导入
scipy.special,需要在文件开头添加一行导入语句:import scipy.special不过通常
autograd的这个文件已经会导入相关模块,大概率不需要这一步。
注意事项
这种修改第三方包文件的方式是临时解决方案——如果你后续更新autograd包,修改的内容会被覆盖。更稳妥的做法是:
- 检查并更新
autograd到兼容当前SciPy版本的最新版本(新版本的autograd已经修复了这个路径问题) - 确认
lifelines的版本是否与你的SciPy版本匹配,升级lifelines到最新稳定版也可能自动解决依赖兼容问题
内容的提问来源于stack exchange,提问作者pill45
相关产品推荐
相关产品推荐

