爱收集资源网

解决ImportErrorDLLloadfailed错误

网络整理 2023-09-15 12:08

“ImportErrorDLLloadfailed找不到指定的程序”的解析和解决办法。

文章目录

运行程序的时侯,发觉了ImportErrorDLLloadfailed找不到指定的程序的报错。网上搜了三天多都找不到解决办法。这儿我的解决过程整理下来,希望可以帮助到和我遇见一样问题的人。

问题描述

(不想看可以跳过)

首先澄清一点,这个报错不是ModuleNotFoundError:Nomodulenamed'XXX'。

ModuleNotFoundError的报错是指:在.py文件的搜索路径下,找不到指定的Module。(这些问题分两种情况,一种是你压根就没安装这个包大头模式找不到,一种是你安装的路径不对。)

ImportErrorDLLloadfailed的报错,简单来说就是你写的时侯不报错(例如ModuleNotFoundError:Nomodulenamed'XXX'下,在pycharm中写importXXX会标红),运行的时侯才报错。

这说明你这个包,是在默认的搜索路径下的。因为你这个包有问题,才造成写的时侯不报错,运行的时侯才报错。

另外须要说一下DLL这个东西。转自DLL文件的百度百科:

库文件即DLL(DynamicLinkLibrary)文件,是动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件才会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。

ImportErrorDLLloadfailed的报错,说白了是函数库调用其依赖库时出现了问题。

在我面对的问题:

import sklearn
import seaborn

sklearn和seaborn这两个库都有依赖库。例如sklearn的依赖库有numpy,scipy和joblib。

问题解析

两种情况:

解决方式

主要就是两种解决办法:

这儿要吐槽一个事情,python的向上不兼容的问题是挺显著的,最明显的就是python3完全不兼容python2,另一个表现是,第三方库都有dependencies,要求个别库的版本>=某个版本。

没想到都会有向下不兼容的问题,即依赖包版本过低,会引起依赖这个包的第三方库未能正常使用(我碰到的就是这个问题)。

查看依赖库信息

有两种方法

本人的解决过程

(献给我自己看,作为一个记录)

在2019.8.16,运行程序的时侯没有问题。

在2019.8.17运行的时侯,忽然发觉会报错ImportErrorDLLloadfailed找不到指定的程序。。报错的句子是importsklearn和importseaborn。当时以为是个小问题(盲目自信),胡乱一顿操作没有哪些进展。

2019.8.18静下心来好好debug。。。

首先,在17号我发觉,在pycharm中运行会报错,然而在命令行运行(其实须要降低搜索路径‘E:\\Anaconda\\lib\\site-packages\\’)是可以的。

然后我复印两者的搜索路径sys.path:

pycharm:

['C:\Users\73416\PycharmProjects\HSIproject', 'C:\Users\73416\PycharmProjects\HSIproject', 'E:\Anaconda\python37.zip', 'E:\Anaconda\DLLs', 'E:\Anaconda\lib', 'E:\Anaconda', 'E:\Anaconda\lib\site-packages', 'E:\Anaconda\lib\site-packages\win32', 'E:\Anaconda\lib\site-packages\win32\lib', 'E:\Anaconda\lib\site-packages\Pythonwin', 'E:\PyCharm 2018.3.4\helpers\pycharm_matplotlib_backend']

命令行:

['C:\\Users\\73416\\PycharmProjects\\HSIproject', 'E:\\Python37\\python37.zip', 'E:\\Python37\\DLLs', 'E:\\Python37\\lib', 'E:\\Python37', 'E:\\Python37\\lib\\site-packages', 'E:\\Python37\\lib\\site-packages\\win32', 'E:\\Python37\\lib\\site-packages\\win32\\lib', 'E:\\Python37\\lib\\site-packages\\Pythonwin', 'E:\\Anaconda\\lib\\site-packages\\']

可见pycharm会使用Anaconda路径下的函数库(‘E:\Anaconda\lib’),命令行运行的时侯会使用Python37路径下的函数库(‘E:\Python37\lib’)。

也就是说,假如我用Python37路径下的相关函数库,去取代Anaconda路径下的相关函数库,这么在pycharm中就可以正常运行了。

这以后我用Python37路径下sklearn的文件夹,替换了Anaconda路径下sklearn的文件夹,发觉还是一样的报错信息。

之后我就怀疑是不是依赖包的的版本问题,造成了ImportError的出现。(总算总算怀疑到点子上了!!!)

然后我通过_version_()函数复印了两个路径下,sklearn的依赖包的版本:

之后大头模式找不到,我就把Anaconda下的numpy库从1.16.2降级到1.15.3。

即在命令行里输入condainstallnumpy=1.15.3(pip的命令是pipinstallnumpy==1.15.3,而且路径不是Anaconda的路径了,还得改路径)。

之后发觉成功了!!!sklearn和seaborn都解决了!!!竟然是numpy这个第三方库向下不兼容的问题(活久见系列)。

最后Anaconda路径下,依赖包的版本:

sklearn: 0.21.3
numpy: 1.15.3
scipy: 1.1.0
joblib: 0.13.2

源代码

import sys,os
# curPath = os.path.abspath(os.path.dirname(__file__))
# print(sys.path)
# # print(os.path.dirname(__file__))
# # print(curPath)
# # rootPath = os.path.split(curPath)[0]
# # print(os.path.split(curPath))
# # print(rootPath)
# # sys.path.append(rootPath)
sys.path.append('E:\\Anaconda\\lib\\site-packages\\')
# # sys.path = ['C:\\Users\\73416\\PycharmProjects\\HSIproject', 'E:\\Python37\\python37.zip', 'E:\\Python37\\DLLs', 'E:\\Python37\\lib', 'E:\\Python37', 'E:\\Python37\\lib\\site-packages', 'E:\\Python37\\lib\\site-packages\\win32', 'E:\\Python37\\lib\\site-packages\\win32\\lib', 'E:\\Python37\\lib\\site-packages\\Pythonwin', 'E:\\Anaconda\\lib\\site-packages\\']
print(sys.path)
# from utils import open_file
import sklearn
import numpy
import scipy
import joblib
import seaborn
print('sklearn:',sklearn.__version__)
print('numpy:',numpy.__version__)
print('scipy:',scipy.__version__)
print('joblib:',joblib.__version__)
print('done!')

大头模式找不到
上一篇:支付宝与日本无关? 下一篇:没有了
相关文章