“ImportError DLL load failed 找不到指定的程序”的解析和解决办法。

文章目录

  • “ImportError DLL load failed 找不到指定的程序”的解析和解决办法。
    • 问题描述
    • 问题解析
    • 解决方法
    • 查看依赖库信息
    • 本人的解决过程
    • 源代码

运行程序的时候,发现了ImportError DLL load failed 找不到指定的程序的报错。网上搜了一天多都找不到解决办法。这里我的解决过程整理出来,希望可以帮助到和我遇到一样问题的人。

问题描述

(不想看可以跳过)

首先澄清一点,这个报错不是ModuleNotFoundError: No module named 'XXX'

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

ImportError DLL load failed的报错,简单来说就是你写的时候不报错(比如ModuleNotFoundError: No module named 'XXX'下,在pycharm中写import XXX会标红),运行的时候才报错。

这说明你这个包,是在默认的搜索路径下的。由于你这个包有问题,才导致写的时候不报错,运行的时候才报错。

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

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

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

在我面对的问题:

import sklearn
import seaborn

sklearnseaborn这两个库都有依赖库。比如sklearn的依赖库有numpy, scipyjoblib

问题解析

两种情况:

  • 函数库本身有问题,导致调用异常。
  • 依赖包版本不符,导致调用异常。

解决方法

主要就是两种解决办法:

  • 重新安装该函数库。
  • 检查依赖包的版本(过高或过低)。

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

没想到还会有向上不兼容的问题,即依赖包版本过高,会导致依赖这个包的第三方库无法正常使用(我遇到的就是这个问题)。

查看依赖库信息

有两种方式

  • 通过命令行查看:conda search package_name --info

    比如查看seaborn的信息,在命令行输入conda search seaborn --info,可以查看seaborn各版本的信息(包括依赖包的信息):

    Loading channels: done
    seaborn 0.8.0 py27h5729117_0
    ……seaborn 0.8.0 py35hda3c85b_0
    ……seaborn 0.9.0 py37_0
    --------------------
    file name   : seaborn-0.9.0-py37_0.tar.bz2
    name        : seaborn
    version     : 0.9.0
    build       : py37_0
    build number: 0
    size        : 379 KB
    license     : BSD 3-Clause
    subdir      : win-64
    url         : https://repo.anaconda.com/pkgs/main/win-64/seaborn-0.9.0-py37_0.tar.bz2
    md5         : 54e8660d9286b4724af1262886b6a08c
    timestamp   : 2018-09-21 11:32:49 UTC
    dependencies:- matplotlib >=1.4.3- numpy >=1.9.3- pandas >=0.14.0- python >=3.7,<3.8.0a0- scipy >=0.15.2- statsmodels >=0.5.0
    

    可以看到最新版本的seaborn要求matplotlib >=1.4.3numpy >=1.9.3pandas >=0.14.0python >=3.7,<3.8.0a0scipy >=0.15.2statsmodels >=0.5.0

    但是无法查看sklearn的信息,因为Anaconda受制于channel,所以有第二种方法。

  • 去官网查看,百度即可。

    比如百度sklearn,可以看到依赖包的版本要求。

    [外链图片转存失败(img-4wCxZvnB-1566137629595)(C:\Users\73416\AppData\Local\Temp\1566133960375.png)]

本人的解决过程

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

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

在2019.8.17运行的时候,突然发现会报错ImportError DLL load failed 找不到指定的程序。。报错的语句是import sklearnimport seaborn。当时以为是个小问题(盲目自信),胡乱一顿操作没有什么进展。

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的依赖包的版本:

  • Python37:

    sklearn: 0.21.3
    numpy: 1.15.3
    scipy: 1.3.0
    joblib: 0.13.2
    
  • Anaconda:

    import sklearn
    sklearn.__version__
    Out[4]: '0.21.3'
    numpy: 1.16.2
    scipy: 1.2.1
    joblib: 0.13.2
    

然后,我就把Anaconda下的numpy库从1.16.2降级到1.15.3。

即在命令行里输入conda install numpy=1.15.3 (pip的命令是pip install numpy==1.15.3,但是路径不是 Anaconda的路径了,还得改路径)。

然后发现成功了!!!sklearnseaborn都解决了!!!居然是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 seabornprint('sklearn:',sklearn.__version__)
print('numpy:',numpy.__version__)
print('scipy:',scipy.__version__)
print('joblib:',joblib.__version__)print('done!')

[debug] “ImportError DLL load failed 找不到指定的程序”的解析和解决办法。相关推荐

  1. 成功解决mod = importlib.util.module_from_spec(spec)ImportError: DLL load failed: 找不到指定的程序。

    成功解决mod = importlib.util.module_from_spec(spec)ImportError: DLL load failed: 找不到指定的程序. 目录 解决问题 解决思路 ...

  2. 成功解决Exception unhandled ImportError DLL load failed: 找不到指定的程序。 lib\imp.py, Line: 343

    成功解决Exception "unhandled ImportError" DLL load failed: 找不到指定的程序. lib\imp.py, Line: 343 目录 ...

  3. 使用tensorflow出现 ImportError: DLL load failed: 找不到指定的程序

    前言 在使用tensorflow过程中会遇到各种各样的问题,在此记录一下,有助于自己回顾和后来人的学习 问题描述 在anaconda中安装了tensorflow,调用时遇到了这样一个问题: >& ...

  4. 解决 from torch._C import *ImportError: DLL load failed: 找不到指定的程序。

    from torch._C import * ImportError: DLL load failed: 找不到指定的程序. Python3.6.0有问题,升级Python版本 conda insta ...

  5. tensorflow出现 ImportError: DLL load failed: 找不到指定的程序

    问题描述 在pycharm中安装了tensorflow 1.8.0, 之后出现了如下问题: Traceback (most recent call last):  File "D:/pyfi ...

  6. 【解决】from win32com.shell import shellcon, shell ImportError: DLL load failed: 找不到指定的程序。

    某天用activate myenv激活虚拟环境的时候出现了这个错误. from win32com.shell import shellcon, shell ImportError: DLL load ...

  7. import torch报错 from torch._C import * ImportError: DLL load failed: 找不到指定的程序。解决办法

    查看很多办法无果之后使用conda install python==3.6.7完美解决

  8. 成功解决from scipy.linalg import _fblas ImportError: DLL load failed: 找不到指定的模块。

    成功解决from scipy.linalg import _fblas ImportError: DLL load failed: 找不到指定的模块. 目录 解决问题 解决思路 解决方法 解决问题 f ...

  9. python import 找不到指定模块_Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法...

    关于conda安装matplotlib报错 最近在师姐机器上跑实验的时候,想利用matplotlib包来绘制损失曲线图,安装过程中碰到了一些小麻烦,感觉之前好像也碰到过类似的问题,网上一搜什么nump ...

最新文章

  1. 10年以后,Google Labs再次回归!VR部门负责人任新leader
  2. R语言创建频数表和列联表
  3. 基于SSM的e律通管理系统
  4. 【云栖说第三期】发现大家对能模仿马云声音的ET有兴趣,我们找了阿里四位专家来聊聊ET背后的人工智能...
  5. 好用的Markdown编辑器推荐
  6. ajax回复留言,Ajax 留言板模拟
  7. Linux用户、用户组、文件权限设置
  8. 【面经】中软-数据实习生
  9. 不能断点调试python_为Python调试构建一个不间断的断点
  10. python写爬虫4-多线程爬虫(采集58出租房信息)_python实现多线程爬虫
  11. 三进制计算机_要做一个编程界优秀的攀登者,首先要认真计算机中的0和1
  12. CFileDialog多选文件的最大数量
  13. python制作ppt_如何利用Excel与Python制作PPT
  14. Windows下常见的SQLite管理工具
  15. oracle 更新数据语句,数据更新语句update
  16. 埋葬了我曾经的执着与思恋题记不过是所谓的世界末日
  17. '\0'和\0的区别
  18. 边缘计算:你应该知道的三个趋势
  19. Java内存模型(JMM)详解
  20. 详解码云和github上git生成SSH公钥

热门文章

  1. python 下载及安装-CentOS下python的下载及安装
  2. 人物 | 当我们在谈论语音识别时,我们在谈些什么?——知乎达人、CMU博士生王赟...
  3. 第O题 巧用二进制解答 现在有n个货物,第i个货物的重量是。。。
  4. python中装饰器的作用_Python中装饰器的用法
  5. 综合评价模型的缺点_【必备】目标检测中的评价指标有哪些?
  6. element ui 表格滚动条抖动的问题
  7. 【数据结构和算法笔记】二叉树和树/森林的相互转换
  8. jni开发-java调用c函数,c调用java函数实现
  9. 修改oracle安装目录权限设置权限,oracle rac环境,安装目录权限被修改乱了,怎么恢复?...
  10. java 管理系统 注释_员工管理系统--带注释--oracle系统--java项目