从sklearn导入时出现ImportError:无法导入名称check_build。

134
我试图从sklearn导入时遇到以下错误:
>>> from sklearn import svm

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
   from sklearn import svm
  File "C:\Python27\lib\site-packages\sklearn\__init__.py", line 16, in <module>
   from . import check_build
ImportError: cannot import name check_build

我正在使用Python 2.7,scipy-0.12.0b1超级包,numpy-1.6.0超级包和scikit-learn-0.11。我使用的是Windows 7操作系统。

我查看了几个答案,但没有一个提供解决这个错误的方法。


尝试将scikit-learn更新到当前版本(0.13)。 - adrianp
现在我遇到了以下错误。 - ayush singhal
导入错误:无法导入名称__check_build,而不是check_build。 - ayush singhal
我已经更新到scikit 0.13。 - ayush singhal
你是如何安装sklearn的?你使用的是二进制安装程序还是软件包安装程序(例如easy_install或pip)? - BenDundee
显示剩余4条评论
13个回答

163

在安装了scipy之后,对我有用。


30
另外还需要重新启动Python解释器。 :) - mannuscript
1
检查是否在同一文件夹中有名为“sklearn”的文件。尝试从不同的文件夹运行。这对我解决了问题(是我的错)。使用<ls | grep -i "sklearn">命令查找文件。 - Punnerud
@Mannu 是的;对我来说,在jupyter笔记本上,只需重新启动(关闭并再次点击打开)ipynb py-kernel即可,而无需重新启动整个jupyter笔记本。 - Abhimanu Kumar
scipy.stats 也无法正常工作,同时引发了错误。在我的情况下,我在同一目录下有一个名为 multiprocessing.py 的文件,它与内核的套接字连接产生了冲突。通过将文件重命名为 multiprocessing_.py 来解决问题(前导下划线不起作用)。 - pylang

51
>>> from sklearn import preprocessing, metrics, cross_validation

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    from sklearn import preprocessing, metrics, cross_validation
  File "D:\Python27\lib\site-packages\sklearn\__init__.py", line 31, in <module>
    from . import __check_build
ImportError: cannot import name __check_build
>>> ================================ RESTART ================================
>>> from sklearn import preprocessing, metrics, cross_validation
>>> 

因此,尝试重新启动命令行窗口!


20
像这样的神奇回答并不真正有帮助,因为它们不能解决问题。如果重新启动无法解决问题呢? - icedwater
4
只是提一下,我使用的scikit-learn 0.15.2是编译在numpy 1.9和python 2.7上的。 - alexbw
3
如果您不想重新启动,del sys.modules ['sklearn.__check_build']; import sklearn 也可以起作用。 - Jared Forsyth

23

我在 Windows 10 上使用 Python 3.6.5 64 位版本时的解决方案:

  1. pip uninstall sklearn
  2. pip uninstall scikit-learn
  3. pip install sklearn

无需重新启动命令行,但如果您愿意,可以这样做。 我花了一天时间来修复这个错误。希望这会有所帮助。


1
如果你的意思是最新版本的sklearn修复了这个bug,那么说明你升级到哪个版本号的sklearn会很有帮助。谢谢。 - rwp
在Windows 10中,我还必须启用长路径才能执行这些指令https://dev59.com/h1QJ5IYBdhLWcg3wBRA4。 - Napuu

9
安装了 numpyscipysklearn 后仍然报错。
解决方案:
设置系统环境变量 PathPYTHONPATH
系统变量:将 C:\Python34 添加到路径中。 用户变量:添加新的变量 (name)PYTHONPATH,(value)C:\Python34\Lib\site-packages;

前往 C:\Python34\Lib\site-packages\sklearn 双击 init.py 和 setup.py。 - user3236650

7
通常当我遇到这种错误时,打开 __init__.py 文件并查看会有所帮助。首先进入目录 C:\Python27\lib\site-packages\sklearn 并确保有一个称为 __check_build 的子目录。在我的机器上(安装了工作正常的 sklearn、Mac OSX、Python 2.7.3),我有 __init__.pysetup.py、它们相关的 .pyc 文件和一个二进制文件 _check_build.so
浏览该目录下的 __init__.py 文件,下一步我会去到 sklearn/__init__.py 并注释掉导入语句 - check_build 的东西只是检查编译是否正确,并没有做任何事情,只是调用了预编译的二进制文件。当然,这是有风险的,并且是一个解决方法。如果您的构建失败,您很快就会遇到其他更大的问题。

我在文件夹中没有_check_build.so,我该怎么做才能为Python 2.7获取它? - ayush singhal
你尝试注释掉 sklearn/__init__.py 中导入它的那行代码了吗? - BenDundee
2
目前,您可以将执行导入的行注释掉,这样应该就可以运行了。然后,您能否在问题跟踪器 https://github.com/scikit-learn/scikit-learn/issues 中打开一个问题,看起来像是一个错误。 - Andreas Mueller
2
值得一提的是,在“init.py”中注释掉“import”并不能解决问题,但确实暴露出了另一个错误——我的SciPy安装并没有成功。问题中的错误掩盖了真正的问题。 - Basic

4

4

在从python.org安装新的64位Python 3.4后,我在导入SKLEARN时遇到了问题。

事实证明,SCIPY模块出现了故障,并且当我尝试“import scipy”时也失败了。

解决方法是使用pip3卸载scipy并重新安装:

C:\> pip uninstall scipy

[lots of reporting messages deleted]

Proceed (y/n)? y
  Successfully uninstalled scipy-1.0.0

C:\Users\>pip3 install scipy

Collecting scipy
  Downloading scipy-1.0.0-cp36-none-win_amd64.whl (30.8MB)
    100% |████████████████████████████████| 30.8MB 33kB/s
Requirement already satisfied: numpy>=1.8.2 in c:\users\johnmccurdy\appdata\loca
l\programs\python\python36\lib\site-packages (from scipy)
Installing collected packages: scipy
Successfully installed scipy-1.0.0

C:\Users>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]
 on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>>
>>> import sklearn
>>>

3
如果您使用的是Anaconda 2.7 64位版本,请尝试:
conda upgrade scikit-learn

我建议您重新启动Python shell,这对我有用。

当我遇到同样的问题并解决它时,我进行了第二次编辑。

conda upgrade scikit-learn

也适用于我。

2

其他的答案对我并没有用。经过一些尝试,我卸载了sklearn:

pip uninstall sklearn

我从这里删除了sklearn文件夹:(根据您的系统和Python版本调整路径)

C:\Users\%USERNAME%\AppData\Roaming\Python\Python36\site-packages

我从这个网站上下载了wheel文件并安装:链接

出现这个错误很可能是因为已经在其他地方安装了sklearn版本冲突。


2

不需要卸载然后重新安装sklearn

尝试这个:

from sklearn.model_selection import train_test_split

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接