pipでライブラリのバージョンを気軽にあげていたら、動かなくなるものが出たので戻し作業をやりました。
良い機会なので、pipで指定したバージョンのライブラリをインストールする方法を紹介します。
方法は、ドキュメントの、examplesの中にあるように、ライブラリ名の後ろに==でつなげてバージョンを指定するだけです。
pip install – examples
ちなみに、今回動かなくなったのは statsmodels です。(バージョンを上げたのはscipy)
# 動かなくなったコード。 ただのインポートさえできなくなった。
import statsmodels.api as sm
# 出力されたエラー
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
in ()
1 import numpy as np
2 import matplotlib.pyplot as plt
----> 3 import statsmodels.api as sm
~/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/statsmodels/api.py in ()
14 from . import robust
15 from .robust.robust_linear_model import RLM
---> 16 from .discrete.discrete_model import (Poisson, Logit, Probit,
17 MNLogit, NegativeBinomial,
18 GeneralizedPoisson,
~/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/statsmodels/discrete/discrete_model.py in ()
43
44 from statsmodels.base.l1_slsqp import fit_l1_slsqp
---> 45 from statsmodels.distributions import genpoisson_p
46
47 try:
~/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/statsmodels/distributions/__init__.py in ()
1 from .empirical_distribution import ECDF, monotone_fn_inverter, StepFunction
----> 2 from .edgeworth import ExpandedNormal
3 from .discrete import genpoisson_p, zipoisson, zigenpoisson, zinegbin
~/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/statsmodels/distributions/edgeworth.py in ()
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'
statsmodelsがインポートできないので、statsmodelsを疑ってしまいそうですが、
根本的な原因は、scipyから、 factorialをインポートできなかったことでした。
----> 7 from scipy.misc import factorial
最近、scipyのバージョンを 1.1.0から 1.3.0 へ上げたのが怪しいです。
真の原因は何か他にありそうな気もするのですが、とりあえずscipy のバージョンを戻します。
戻し手順は最初に対象のライブラリをアンインストールした後に、再度バージョン指定してインストールです。
$ pip uninstall scipy
Uninstalling scipy-1.3.0:
# --- 略 ---
Proceed (y/n)? y
Successfully uninstalled scipy-1.3.0
$ pip install scipy==1.1.0
# --- 略 ---
Installing collected packages: scipy
これでscipyのバージョンが戻り、再びstatsmodelsをimport できるようになりました。