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

2023-11-18

“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 seaborn

print('sklearn:',sklearn.__version__)
print('numpy:',numpy.__version__)
print('scipy:',scipy.__version__)
print('joblib:',joblib.__version__)

print('done!')

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Google App Engine queue.yaml 无法在开发服务器中工作

    我无法让 dev appserver py 识别我使用queue yaml 创建的自定义队列 他们没有出现在http localhost 8000 taskqueue http localhost 8000 taskqueue 当我尝试向其
  • 递归 lambda 表达式可能吗?

    我正在尝试编写一个调用自身的 lambda 表达式 但我似乎找不到任何语法 或者即使它是可能的 本质上我想将以下函数传输到以下 lambda 表达式中 我意识到这是一个愚蠢的应用程序 它只是添加 但我正在探索可以在 python 中使用 l
  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • 检查 Python 中的可迭代对象中的所有元素的谓词是否计算为 true

    我很确定有一个常见的习语 但我无法通过谷歌搜索找到它 这是我想做的 用Java Applies the predicate to all elements of the iterable and returns true if all ev
  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • Pandas:如果单元格包含特定文本则删除行

    pandas 中的这段代码不起作用 如果该列包含提供的任何文本 数字 我希望它删除该行 目前 我只能在单元格与我的代码中传递的确切文本匹配时才能使其工作 因为它只删除显示 Fin 的单元格不是金融或金融 df2 df df Team Fin
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • 没有名为 StringIO 的模块

    我有Python 3 6 我想从另一个名为 run py 的 python 文件执行名为 operation py 的 python 文件 In operation py I do from cStringIO import StringI
  • 如何使用文本相似性删除 pandas 数据框中相似(不重复)的行?

    我有数千个数据 这些数据可能相似也可能不相似 使用 python 的默认函数 drop duplicates 并没有真正的帮助 因为它们只检测相似的数据 例如 如果我的数据包含类似以下内容怎么办 嗨 早上好 嗨 早上好 Python 不会将
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • 使用 python 绘制正值小提琴图

    我发现小提琴图信息丰富且有用 我使用 python 库 seaborn 然而 当应用于正值时 它们几乎总是在低端显示负值 我发现这确实具有误导性 尤其是在处理现实数据集时 在seaborn的官方文档中https seaborn pydata
  • 使用Python计算目录的大小?

    在我重新发明这个特殊的轮子之前 有没有人有一个很好的例程来使用 Python 计算目录的大小 如果例程能够很好地以 Mb Gb 等格式格式化大小 那就太好了 这会遍历所有子目录 总结文件大小 import os def get size s
  • Jython 和 SAX 解析器:允许的实体不超过 64000 个?

    我做了一个简单的测试xml saxJython 中的解析器在处理大型 XML 文件 800 MB 时遇到以下错误 Traceback most recent call last File src project xmltools py li
  • ANTLR 获取并拆分词法分析器内容

    首先 对我的英语感到抱歉 我还在学习 我为我的框架编写 Python 模块 用于解析 CSS 文件 我尝试了 regex ply python 词法分析器和解析器 但我发现自己在 ANTLR 中 第一次尝试 我需要解析 CSS 文件中的注释
  • 将seaborn.palplot轴添加到现有图形中以可视化不同调色板

    将seaborn人物添加到子图中是usually https seaborn pydata org examples cubehelix palette html创建图形时通过传递 ax 来完成 例如 sns kdeplot x y cma
  • Django Admin 中的反向内联

    我有以下 2 个型号 现在我需要将模型 A 内联到模型 B 的页面上 模型 py class A models Model name models CharField max length 50 class B models Model n
  • 如何与其他用户一起使用 pyenv?

    如何与其他用户一起使用 pyenv 例如 如果我在用户 test 的环境中安装了 pyenv 则当我以 test 身份登录时可以使用 pyenv 但是 当我以其他用户 例如 root 身份登录时如何使用 pyenv 即使你这么做了 我也会s
  • 多个对象以某种方式相互干扰[原始版本]

    我有一个神经网络 NN 当应用于单个数据集时 它可以完美地工作 但是 如果我想在一组数据上运行神经网络 然后创建一个新的神经网络实例以在不同的数据集 甚至再次同一组数据 上运行 那么新实例将产生完全错误的预测 例如 对 XOR 模式进行训练

随机推荐

  • 禁止浏览器访问某些页面

    windows下 利用php apache http代理 实现本地页面黑名单 背景 准备工作 解决方案 背景 有一个项目 需要给第三方桌面软件做二次开发 但是这个软件启动时会弹出一个页面 这个页面的权限很大 如果不禁止掉的话 会给系统安全带
  • 51Nod 1081 子段求和

    题目链接 http www 51nod com Challenge Problem html problemId 1081 include
  • linux笔记整理

    Linux基础 一 基础目录 根目录 下 bin 存放普通用户可以使用的命令 boot 存放引导程序 内核等 dev 设备文件目录 etc 配置文件目录 home 普通用户家目录 lib 库文件和内核模块存放目录 lib64 64位库 pr
  • mybatis 日期格式化

    例子 SELECT date format create date Y m d H i s date format update date Y m d FROM user Y m d H i s 带时分秒 Y m d 不带时分秒
  • 设计一个算法判断表达式中的括号是否匹配

    一 问题描述 设计一个算法判断表达式中的括号是否匹配 二 问题解答 解析 这里需要用到STL在算法设计中的应用 STL在算法设计中的应用有如下几种 存放主数据 存放临时数据 检测数据元素的唯一性 数据的排序 优先队列作为堆 因此这里需要用上
  • 安装visio报错,提示无法安装64位版本的Office,找到了以下32位程序怎么办

    今天安装Visio准备用来写系统详细说明书上面画图的结果发现居然报错 实在是我也没有装过office 试过了几个方案什么office修复助手啊 什么什么的发现卵用没有 最后解决方案 win r打开运行 输入regedit 依次到HKEY C
  • 服务器拔下内存条系统不能启动,电脑主板不能启动的解决方法

    电脑主板不能启动的解决方法 因为主板扩展槽或扩展卡有问题 导致插上显卡 声卡等扩展卡后 主板没有响应 因此造成开机无显示 例如蛮力拆装agp显卡 导致agp插槽开裂 即可造成此类故障 下面是JY135小编收集整理的电脑主板不能启动的解决方法
  • 操作系统习题整理

    操作系统习题整理 从网上和课本上汇总整理了一些操作系统相关的习题 可以作为复习资料使用 1 操作系统是一种 B A 通用软件 B 系统软件 C 应用软件 D 软件包 2 操作系统是对 C 进行管理的软件 A 软件 B 硬件 C计算机资源 D
  • replaceAll()正则表达式替换内容

    String input camelCasing input input replaceAll A Z 1 System out println input 输出结果为 camel Casing
  • Pandas rank()函数排名的用法与解释

    之前搜关于pandas rank 函数的帖子 好几个大哥都是照搬书 当然也有一些大神直接一顿操作 截图 我结合了书还有自己的理解 希望没有错误 也希望和我一样的新手能看懂 谢谢 1 rank 默认情况下 rank 通过将平均排名分配到每个组
  • thinkphp6 入门(6)--中间件是什么 怎么用

    一 什么是中间件 当客户端发送请求至服务器时 HTTP请求会经过多个中间件 最后返回响应给客户端 中间件可以 在请求到达目标控制器或动作之前对请求进行操作 可以在响应离开目标控制器或动作之前对响应进行操作 二 中间件的作用 我们可以在不修改
  • 【Linux学习】vim编辑器的使用

    Linux环境中vim编辑器的使用 前言 一 vim是什么 二 vim的使用 1 vim的三种模式 1 1 命令模式 Command mode 1 2 输入模式 Insert mode 1 3 底线命令模式 Last line mode 2
  • xshell5中文破解版

    http www xue51 com soft 1442 html
  • 护网面试题

    1 有无安全设备的使用经验 2 了解过TOP10没有 1 SQL注入 2 失效的身份认证和会话管理 3 跨站脚本攻击XSS 4 直接引用不安全的对象 5 安全配置错误 6 敏感信息泄露 7 缺少功能级的访问控制 8 跨站请求伪造CSRF 9
  • 解决找不到mfc140.dll的问题

    mfc140 dll控件常规安装方法 仅供参考 如果在运行某软件或编译程序时提示缺少 找不到mfc140 dll等类似提示 您可将从脚本之家下载来的mfc140 dll拷贝到指定目录即可 一般是system系统目录或放到软件同级目录里面 或
  • Neo4j宣布下一代图数据平台Neo4j 5上线

    增强的可扩展性 敏捷性 高效率和性能优势使企业能够在任何环境中更快 更轻松地创建和部署智能应用程序 中国北京 2022 年 11 月 10日 图技术的领导者Neo4j 今天宣布了下一代可用于云端的图数据平台Neo4j 5上线 在传统数据库的
  • 不均匀硬币产生等概率/均匀硬币产生非等概率

    不均匀硬币产生等概率 已知随机数生成函数random 返回0的概率是60 返回1的概率是40 根据random 实现一个随机数函数f 使返回0和1的概率是50 连续投掷两次 第一次为0 第二次为1 返回0 第一次为1 第二次为0 返回1 这
  • Unicode汉字编码表

    1 Unicode编码表 Unicode只有一个字符集 中 日 韩的三种文字占用了Unicode中0x3000到0x9FFF的部分 Unicode目前普遍采用的是UCS 2 它用两个字节来编码一个字符 比如汉字 经 的编码是0x7ECF 注
  • 使用layui 写一段动态向form表单添加select下拉框,带删除功能

    可以参考如下示例代码 实现动态向表单中添加和删除 select 下拉框 div class layui container div
  • [debug] “ImportError DLL load failed 找不到指定的程序”的解析和解决办法。

    ImportError DLL load failed 找不到指定的程序 的解析和解决办法 文章目录 ImportError DLL load failed 找不到指定的程序 的解析和解决办法 问题描述 问题解析 解决方法 查看依赖库信息