导入 scikit-learn 模块时出错
Posted
技术标签:
【中文标题】导入 scikit-learn 模块时出错【英文标题】:Error importing scikit-learn modules 【发布时间】:2015-08-26 07:00:05 【问题描述】:我正在尝试从集群模块调用一个函数,如下所示:
import sklearn
db = sklearn.cluster.DBSCAN()
我收到以下错误:
AttributeError: 'module' object has no attribute 'cluster'
在 IPython 中完成制表符,我似乎可以访问 base、clone、externals、re、setup_module、sys 和 warning 模块。没有别的,虽然其他(包括集群)在 sklearn 目录中。
遵循以下 pbu 的建议并使用
from sklearn import cluster
我明白了:
Traceback (most recent call last):
File "test.py", line 2, in <module>
from sklearn import cluster
File "C:\Python34\lib\site-packages\sklearn\cluster\__init__.py", line 6, in <module>
from .spectral import spectral_clustering, SpectralClustering
File "C:\Python34\lib\site-packages\sklearn\cluster\spectral.py", line 13, in <module>
from ..utils import check_random_state, as_float_array
File "C:\Python34\lib\site-packages\sklearn\utils\__init__.py", line 16, in <module>
from .class_weight import compute_class_weight, compute_sample_weight
File "C:\Python34\lib\site-packages\sklearn\utils\class_weight.py", line 7, in <module>
from ..utils.fixes import in1d
File "C:\Python34\lib\site-packages\sklearn\utils\fixes.py", line 318, in <module>
from scipy.sparse.linalg import lsqr as sparse_lsqr
File "C:\Python34\lib\site-packages\scipy\sparse\linalg\__init__.py", line 109, in <module>
from .isolve import *
File "C:\Python34\lib\site-packages\scipy\sparse\linalg\isolve\__init__.py", line 6, in <module>
from .iterative import *
File "C:\Python34\lib\site-packages\scipy\sparse\linalg\isolve\iterative.py", line 7, in <module>
from . import _iterative
ImportError: DLL load failed: The specified module could not be found.
我在 Windows 上使用 Python 3.4,scikit-learn 0.16.1。
【问题讨论】:
看不懂,sklearn
怎么导入?
为什么不重新安装?可能是 sklearn 已损坏。
【参考方案1】:
将此行放在python文件的顶部
from sklearn import cluster
应该这样做:))
【讨论】:
这会产生不同的错误;查看原始帖子的更新。【参考方案2】:问题在于 scipy/numpy 安装。我一直在使用来自http://www.lfd.uci.edu/~gohlke/pythonlibs/ 的(通常非常好!)非官方安装程序。从那里卸载/重新安装没有区别,但使用官方安装程序(链接自 http://www.scipy.org/install.html)安装就可以了。
【讨论】:
Numpy 在 lfd.uci.edu/~gohlke/pythonlibs 为我工作,但 scipy 很尴尬,不得不从 sourceforge 下载 win32 superpack.exe。不过现在都在工作。谢谢乔恩。【参考方案3】:你可能不使用 Numpy+MKL,而只使用 Numpy。
我遇到了同样的问题并用 MKL 重新安装了 Numpy
pip install --upgrade --force-reinstall "numpy‑1.16.3+mkl‑cp37‑cp37m‑win32.whl"
修复它。
注意:将文件更新到最新版本,可能是 64 位 - 请参阅 the list of available Windows binaries
【讨论】:
如果你在 64 位上运行,你可以从 lfd.uci.edu/~gohlke/pythonlibs/#numpy 安装 Numpy + NKL【参考方案4】:我使用anaconda
在加载 Orange 或 PlotNine 时遇到与 OP 相同的错误。
我不记得什么时候开始发生这种情况。
在 DependencyWalk 中缺少跟踪 Anaconda3\Lib\site-packages\scipy\special\_ufuncs.cp36-win32.pyd
、libifcoremd.dll
和 libmmd.dll
的依赖关系。在anaconda根目录中搜索它们,它们位于ICC_RT和一个版本的MKL包中。
将Anaconda3\pkgs\mkl-2017.0.3-0\Library\bin
添加到PATH,似乎修复了SciPy和NumPy相关的DLL加载失败,上面的包又开始工作了。
我仍然不知道如何正确解决此问题。显然,缺点是 MKL 包可以更新,版本可能会改变,路径也会改变。在这方面它与添加非托管包同样不方便。
重新安装ICC_RT为我解决了这个问题,libmmd.dll
和相关的dll之后会自动复制到anaconda3/library/bin
,然后通过activate
命令自动添加到PATH
。以前所有与 numpy/scipy 相关的 cant load DLL
错误现在都消失了。
【讨论】:
【参考方案5】:从错误日志看,scipy模块是最新的模块导入失败
File "C:\Python34\lib\site-packages\sklearn\utils\fixes.py", line 318, in <module>
from scipy.sparse.linalg import lsqr as sparse_lsqr
File "C:\Python34\lib\site-packages\scipy\sparse\linalg\__init__.py", line 109, in <module>
from .isolve import *
File "C:\Python34\lib\site-packages\scipy\sparse\linalg\isolve\__init__.py", line 6, in <module>
from .iterative import *
File "C:\Python34\lib\site-packages\scipy\sparse\linalg\isolve\iterative.py", line 7, in <module>
from . import _iterative
ImportError: DLL load failed: The specified module could not be found.
我有同样的错误,显示相同的日志,当我卸载/安装 scipy 时问题就消失了:
pip uninstall scipy
pip install scipy
【讨论】:
【参考方案6】:对我来说,修复的是这些命令:
pip uninstall sklearn
pip uninstall scikit-learn
pip uninstall scipy
pip install scipy
pip install scikit-learnhere
【讨论】:
【参考方案7】:我遇到了同样的问题,并通过安装/更新 mkl 包解决了它:
conda install mkl
或
pip install mkl
只是为了获取完整信息,这还降级了以下软件包:
以下软件包将被更新:
mkl: 2017.0.4-h6d528fc_0 defaults --> 2018.0.3-1 defaults
以下软件包将被降级:
numpy: 1.11.3-py34_0 defaults --> 1.10.1-py34_0 defaults
pandas: 0.19.2-np111py34_1 defaults --> 0.18.1-np110py34_0 defaults
scikit-learn: 0.18.1-np111py34_1 defaults --> 0.17-np110py34_1 defaults
scipy: 0.19.1-np111py34_0 defaults --> 0.16.0-np110py34_0 defaults
【讨论】:
【参考方案8】:我努力想弄清楚这一点;尝试从网站下载并安装(非官方)Numpy+MKL 库(有风险/乏味?)。
最终获得成功:
使用管理员权限登录到命令提示符;如何在这里:https://superuser.com/questions/968214/open-cmd-as-admin-with-windowsr-shortcut
卸载现有/复杂的 Scipy 和 Numpy 版本
pip uninstall scipy
pip uninstall numpy
全新安装 Scipy 和 Numpy
pip install scipy
pip install numpy
消息ImportError: DLL load failed: The specified module could not be found 通知无法识别和获取使用 scikit-learn 库所需的 DLL;全新安装 scipy/numpy 可能会更好地路由从 Jupyter 笔记本代码调用的 DLL 连接。
【讨论】:
【参考方案9】:下载 microsoft visual c++ 发行版
链接:https://www.microsoft.com/en-in/download/details.aspx?id=53840
vc_redist.x64.exe
在你的电脑上安装并运行这个.exe文件..之后不会出现DLL导入模块错误
现在它可以正常工作了:)
【讨论】:
这个问题是 4 年前报告的,而 Visual C++ 的问题是由于一些 openmp 打包导致的,并且仅对 scikit-learn 0.22 有效以上是关于导入 scikit-learn 模块时出错的主要内容,如果未能解决你的问题,请参考以下文章