编程语言
首页 > 编程语言> > python – ImportError:无法导入名称’factorial’

python – ImportError:无法导入名称’factorial’

作者:互联网

我想使用logit模型并尝试导入statsmodels库.
我的版本:Python 3.6.8

我得到的最好的建议是降级scipy但不清楚如何以及应该降级到什么版本.请帮忙解决.
https://github.com/statsmodels/statsmodels/issues/5747

将statsmodels.formula.api导入为smf

ImportError                               Traceback (most recent call last)
<ipython-input-52-f897a2d817de> in <module>
----> 1 import statsmodels.formula.api as smf

~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/formula/api.py in <module>
     13 from statsmodels.robust.robust_linear_model import RLM
     14 rlm = RLM.from_formula
---> 15 from statsmodels.discrete.discrete_model import MNLogit
     16 mnlogit = MNLogit.from_formula
     17 from statsmodels.discrete.discrete_model import Logit

~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/discrete/discrete_model.py in <module>
     43 
     44 from statsmodels.base.l1_slsqp import fit_l1_slsqp
---> 45 from statsmodels.distributions import genpoisson_p
     46 
     47 try:

~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/distributions/__init__.py in <module>
      1 from .empirical_distribution import ECDF, monotone_fn_inverter, StepFunction
----> 2 from .edgeworth import ExpandedNormal
      3 from .discrete import genpoisson_p, zipoisson, zigenpoisson, zinegbin

~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/distributions/edgeworth.py in <module>
      5 import numpy as np
      6 from numpy.polynomial.hermite_e import HermiteE
----> 7 from scipy.misc import factorial
      8 from scipy.stats import rv_continuous
      9 import scipy.special as special

ImportError: cannot import name 'factorial'```

解决方法:

this issue on statsmodels’ github repo开始,解决方案似乎是将SciPy降级到版本1.2(当前版本为1.3,您似乎使用它).
至少对我来说,SciPy 1.2在scipy.misc包中具有阶乘功能.

你可以做

python3.6 -m pip install scipy==1.2 --upgrade

如果您没有标准安装权限,请使用–user选项.

也许你想避免使用pip,因为你正在使用Conda.您应该能够在Conda中固定scipy的版本,但如果您不打算将任何其他软件包添加到您的环境中,只需使用pip版本即可.
当然,降级SciPy可能会在其他地方引起问题,但这很难预见,尤其是在不确切知道您安装了哪些其他软件包和依赖项的情况下;你只需要找出答案.手指越过没有结束依赖地狱(因为你已经在门口).

更令人好奇的是,自1.0版以来,scipy.misc.factorial已被弃用;应该使用scipy.special.factorial.

但是,在1.2版中导入不会显示任何明确的警告,也不会使用它.这可以解释为什么statsmodels仍然使用旧导入.修复程序正在为下一个statsmodels版本发布.

标签:statsmodels,python,python-3-x
来源: https://codeday.me/bug/20191005/1857463.html