升级到sklearn 0.15后出现导入错误

2 投票
1 回答
2667 浏览
提问于 2025-04-18 15:48

我在使用64位的Ubuntu 13.10和Python 2.7.5,之前一直在用sklearn 0.14。后来我通过以下方式升级到了0.15:

pip install --upgrade scikit-learn

结果我遇到了以下问题:

from sklearn import svm

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "sklearn/svm/__init__.py", line 13, in <module>
    from .classes import SVC, NuSVC, SVR, NuSVR, OneClassSVM, LinearSVC
  File "sklearn/svm/classes.py", line 1, in <module>
    from .base import BaseLibLinear, BaseSVC, BaseLibSVM
  File "sklearn/svm/base.py", line 9, in <module>
    from . import libsvm_sparse
  File "libsvm_sparse.pyx", line 5, in init sklearn.svm.libsvm_sparse (sklearn/svm/libsvm_sparse.c:6773)
  File "sklearn/utils/__init__.py", line 11, in <module>
    from .validation import (as_float_array, check_arrays, safe_asarray,
  File "sklearn/utils/validation.py", line 17, in <module>
    from .fixes import safe_copy
  File "sklearn/utils/fixes.py", line 18, in <module>
    from .testing import ignore_warnings
  File "sklearn/utils/testing.py", line 36, in <module>
    from nose.tools import assert_equal
ImportError: No module named nose.tools

然后,如果我再试一次 -

from sklearn import svm

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "sklearn/svm/__init__.py", line 13, in <module>
    from .classes import SVC, NuSVC, SVR, NuSVR, OneClassSVM, LinearSVC
  File "sklearn/svm/classes.py", line 1, in <module>
    from .base import BaseLibLinear, BaseSVC, BaseLibSVM
  File "sklearn/svm/base.py", line 8, in <module>
    from . import libsvm, liblinear
ImportError: cannot import name libsvm

导入sklearn本身没有出现导入错误。

其他人对类似问题的回答建议卸载再重新安装,这对他们有帮助,但对我没用。

编辑:在卸载和重新安装了好几次之后,包括卸载和重新安装scikit-image,问题似乎解决了,或者至少有所改变。我现在得到的是:

from sklearn import svm
/usr/local/lib/python2.7/dist-packages/scipy/stats/_continuous_distns.py:24: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility
  from . import vonmises_cython
/usr/local/lib/python2.7/dist-packages/scipy/stats/stats.py:188: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility
  from ._rank import rankdata, tiecorrect
/usr/local/lib/python2.7/dist-packages/scipy/interpolate/interpolate.py:28: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility
  from . import _ppoly
/usr/local/lib/python2.7/dist-packages/scipy/spatial/__init__.py:90: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility
  from .ckdtree import *
/usr/local/lib/python2.7/dist-packages/scipy/spatial/__init__.py:91: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility
  from .qhull import *

(我使用的是numpy 1.8.1)

不过,除了警告之外,其他的看起来都正常。我不知道问题是什么,也不知道是什么解决了它。也许是先安装sklearn,再安装skimage……

编辑2:问题通过完全卸载scipy和numpy解决了(包括手动从/usr/local/lib/python2.7/dist-packages/和/usr/share/pyshared/中删除它们)。

1 个回答

1

看起来在安装scikitlearn的时候,依赖的包出了点问题(虽然之前我也没遇到过这个情况)。我通过运行

pip install nose

安装了nose,这样错误就消失了。希望这对你有帮助。

撰写回答