Python sklearn分类时遇ImportError: DLL加载失败问题求助
解决sklearn导入时的ImportError: DLL load failed问题
我是Python与数据挖掘初学者,使用Python 3.6在PyCharm中调用sklearn的train_test_split实现分类时,遭遇ImportError: DLL load failed: The specified procedure could not be found错误,相关包已更新至最新。
代码片段
import numpy as np from sklearn.model_selection import train_test_split from sklearn import neighbors import pandas as pd df = pd.read_csv('breast-cancer-wisconsin.data') df.replace('?', -9999, inplace=True) df.drop(['id'], 1, inplace=True) X = np.array(df.drop(['class'], 1)) y = np.array(df['class']) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) clf = neighbors.KNeighborsClassifier() clf.fit(X_train, y_train) accuracy = clf.score(X_test, y_test) print(accuracy)
报错信息
Traceback (most recent call last): File "C:/Users/Mahin/Google Drive/Workspace/Local Accuracy of Classifiers/Learning/LearningRegression.py", line 2, in <module> from sklearn.model_selection import train_test_split File "C:\Users\Mahin\Google Drive\Workspace\Local Accuracy of Classifiers\venv\lib\site-packages\sklearn\__init__.py", line 134, in <module> from .base import clone File "C:\Users\Mahin\Google Drive\Workspace\Local Accuracy of Classifiers\venv\lib\site-packages\sklearn\base.py", line 13, in <module> from .utils.fixes import signature File "C:\Users\Mahin\Google Drive\Workspace\Local Accuracy of Classifiers\venv\lib\site-packages\sklearn\utils\__init__.py", line 11, in <module> from .validation import (as_float_array, File "C:\Users\Mahin\Google Drive\Workspace\Local Accuracy of Classifiers\venv\lib\site-packages\sklearn\utils\validation.py", line 18, in <module> from ..utils.fixes import signature File "C:\Users\Mahin\Google Drive\Workspace\Local Accuracy of Classifiers\venv\lib\site-packages\sklearn\utils\fixes.py", line 144, in <module> from scipy.sparse.linalg import lsqr as sparse_lsqr # noqa File "C:\Users\Mahin\Google Drive\Workspace\Local Accuracy of Classifiers\venv\lib\site-packages\scipy\sparse\linalg\__init__.py", line 118, in <module> from .matfuncs import * File "C:\Users\Mahin\Google Drive\Workspace\Local Accuracy of Classifiers\venv\lib\site-packages\scipy\sparse\linalg\matfuncs.py", line 19, in <module> import scipy.special File "C:\Users\Mahin\Google Drive\Workspace\Local Accuracy of Classifiers\venv\lib\site-packages\scipy\special\__init__.py", line 640, in <module> from ._ufuncs import * ImportError: DLL load failed: The specified procedure could not be found.
可能原因分析
从报错栈能看出来,问题其实出在scipy.special的DLL加载上,而非sklearn本身。结合你使用的Python 3.6,大概率是以下几种情况:
- 版本不兼容:最新版的scipy已不再支持Python 3.6,强行更新到最新版会出现DLL不匹配的问题。
- 缺失系统依赖库:scipy的部分功能依赖Windows系统的VC++运行库,若系统未安装或版本不对,会触发DLL加载失败。
- 虚拟环境混乱:虚拟环境中可能存在不同版本的依赖包相互冲突,比如numpy和scipy版本不匹配。
可行解决方案
给你几个按优先级排序的解决办法,你可以逐个尝试:
降级scipy到兼容Python 3.6的版本
打开PyCharm终端,激活虚拟环境后执行:pip install scipy==1.5.4这个版本是最后一个支持Python 3.6的scipy稳定版,能有效解决版本不兼容问题。
安装/更新VC++运行库
安装Visual C++ Redistributable for Visual Studio 2017(注意匹配系统位数:32位或64位),很多Python科学计算库都依赖该运行库,安装完成后重启PyCharm再测试。重新创建干净的虚拟环境
如果上述方法无效,可能是虚拟环境已混乱。可以删掉现有虚拟环境,重新创建:- 删除当前的venv文件夹
- 新建虚拟环境,指定Python 3.6作为解释器
- 依次安装兼容版本的依赖包:
pip install numpy==1.19.5 pandas==1.1.5 scikit-learn==0.24.2 scipy==1.5.4
这些版本均经过验证,与Python 3.6完全兼容。
检查Python位数与系统位数是否匹配
确认安装的Python 3.6与Windows系统位数一致(均为32位或64位),若32位Python安装了64位scipy,也会出现DLL加载失败问题。
希望这些方法能帮你解决问题!
内容的提问来源于stack exchange,提问作者Mahin
相关产品推荐
相关产品推荐

