[Python] ImportError: DLL load failed ... 找不到指定的模块 此类问题解决方法

2023-05-16

文章目录

    • 问题
    • 定位
    • 结论
    • 补充

问题

最近升级 Python 项目,由 Python2.7 升级到 Python3.8.3,项目使用了 PySide2,对于较新的Python3.8.3 , PySide2 可能存在些许不兼容问题,环境配置完成后,出现一连串的
ImportError: DLL load failed 找不到指定模块
对于很多 Python 开发者来说,这类问题最为头疼,不知道如何下手解决。

我是在 virtualenv 虚拟环境下配置 Python3.8.3 的开发环境。

  • OS: Windows 7 x64
  • Python: 3.8.3

各种依赖安装完毕后,运行项目,首先报出的是

from .shiboken2 import *
ImportError: DLL load failed while importing shiboken2: 找不到指定的模块

定位

从提示上看,是加载 DLL 失败,是关于 shiboken2 模块的。
第一反应是,这个库用到了某个 DLL, DLL 所在路径没有加到虚拟环境的变量 path 中。
于是打开 shiboken2 的包目录查找,看到有一些 DLL 文件:
在这里插入图片描述
首先尝试把它们复制到 Python 虚拟环境的 Scripts 目录下。依然不行,看来路径正确还是不行,或许是缺少其它依赖的 DLL,网上下载、打开 DLL 依赖检查工具 Dependency Walker,将 shiboken2.pyd 拖入这个工具中,发现缺少 python3.dll 依赖:
在这里插入图片描述
原来,在创建 Python3.8.3 虚拟环境时,只自动复制了 python38.dllScripts 目录,没有 python3.dll,于是手动复制 python3.dll 到虚拟环境的 Scripts 目录。再次运行项目,果然上面错误没有了。但报了另外一个错误:

from PySide2.QtCore import QObject, QSettings
ImportError: DLL load failed while importing QtCore: 找不到指定的模块

继续使用 Dependency Walker,打开 PySide2 包目录下的 QtCore.pyd,发现缺少几个 DLL 文件:
在这里插入图片描述
网上搜索并下载缺失的 DLL 文件,放到 Scripts 目录,再次运行项目,错误消失啦。

结论

Dependency Walker 真香!
在这里插入图片描述

补充

有时还会遇到 %1 不是有效的 win32 程序 这种对python开发者来说也是比较头疼的。
通常这个问题都是由于某个包内的 pyd 或 dll 与 python 的版本(x86/x64)不匹配。如何查看 pyd 或 dll 是多少位的?Windows 下使用 dumpbin.exe 工具(安装了VS2019才有,或者网上下载吧)。
比如我遇到的:安装了 PyQt5 后,导入 PyQt5时,报错: sip 不是有效的 win32 程序。

dumpbin.exe /HEADERS sip.pyd

执行后发现 sip.pyd 是x86的(32位),而我的Python是64位,而且其他装好的的QtGui.pyd, QtCore.pyd 等等都是 64位,难怪不匹配。只有sip.pyd 是 32 位,不清楚这情况是如何造成的。
于是 pip uninstall 了 PyQt5_sip,pip 重新安装 ,版本正确了,错误消失了

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

[Python] ImportError: DLL load failed ... 找不到指定的模块 此类问题解决方法 的相关文章

随机推荐

  • Android 人脸解锁源码剖析

    和你一起终身学习 xff0c 这里是程序员Android 经典好文推荐 xff0c 通过阅读本文 xff0c 您将收获以下知识点 一 人脸识别身份验证HIDL 二 人脸模块流程分析 三 人脸录入 四 人脸匹配 五 人脸解锁屏幕 一 人脸识别
  • Android 手机按键客制化详解

    在Android 中会有以下5个按键 xff08 Back Home Menu Power Volume xff09 与用户进行交互 xff0c Framework 层中实现按键功能 xff0c 因此 xff0c 从手机系统定制的角度 xf
  • 基python实现多线程网页爬虫

    一般来说 xff0c 使用线程有两种模式 一种是创建线程要执行的函数 把这个函数传递进Thread对象里 xff0c 让它来执行 另一种是直接从Thread继承 xff0c 创建一个新的class xff0c 把线程执行的代码放到这个新的c
  • 手机重启问题 Log 抓取方法

    极力推荐文章 xff1a 欢迎收藏 Android 干货分享 本篇文章主要介绍展讯平台手机开发中的部分重启问题知识点 xff0c 通过阅读本篇文章 xff0c 您将收获以下内容 一 User 版本 默认开启 sysdump 方法 二 插入S
  • CentOS7下普通账号通过systemctl管理服务需要输入root密码

    问题描述 xff1a 使用普通账号test通过systemctl启动系统服务提示需要输入root密码 xff1a 解决方案 xff1a 根据上面提示得知权限由polkit进行管理 xff0c 对应的是org freedesktop syst
  • VNC的安装使用和分辨率设置

    1 使用yum命令安装VNC server xff1a yum y install tigervnc server 若为离线环境则安装rpm包 rpm ivh tigervnc server 1 8 0 17 el7 x86 64 rpm
  • Linux如何搭建Java部署环境

    Java具有着跨平台的特性 xff0c 一次编写 xff0c 到处运行 xff0c 如 xff1a 将Java程序部署到Linux上也可以运行 xff0c 但是也是需要借助一些工具 xff0c 如 xff1a JDK xff0c MySql
  • 银河麒麟桌面系统启用 rc.local 设置开机启动方法

    银河麒麟系统不再使用initd管理系统 xff0c 改用systemd 然而systemd很难用 xff0c 改变太大 xff0c 跟之前的完全不同 使用systemd设置开机启动 xff0c 为了像以前一样 xff0c 在 etc rc
  • 记录一次RocketMq消费不均的解决方案

    背景 xff1a xxx课件系统有一个打包操作 xff0c 打包时需要把课件里面所有视频 音频 图片 试题 文本等内容下载下来 xff0c 视频 图片根据不同需求需要压缩或者转码 xff0c 然后再上传到服务器 xff0c 所以根据课件内容
  • 教你在 PC 上安装 Arch Linux

    Arch Linux以其复杂的基于命令的安装而闻名 但是一旦你熟悉了这个过程的来龙去脉 xff0c 你就可以在任何电脑上安装 Arch 而不必担心终端 我们会帮助你到达那里 注意 xff1a Arch Linux ISO 包含一个名为arc
  • 如何对map进行排序

    Map介绍 常用的Map有HashMap xff0c TreeMap xff0c LinkedHashMap HashMap xff1a 最常用的Map xff0c 根据key的HashCode值来存储数据 xff0c 根据key可以直接获
  • 使用C++ 11 实现阻塞队列

    阻塞队列介绍 阻塞队列主要用于线程和线程之间的通信 当队列为空时 xff0c 从队列中获取元素的线程将会被挂起 xff1b 当队列是满时 xff0c 往队列里添加元素的线程将会挂起 本文使用C 43 43 11中的多线程库 xff0c 实现
  • 如何分析Android的Log

    转载自 http www 2cto com kf 201405 297264 html 首先 xff0c 让我们看一看AndroidLog的格式 下面这段log是以所谓的long格式打印出来的 从前面Logcat的介绍中可以知道 xff0c
  • DB2 的自增主键方式

    DB2 的自增主键方式 xff1a 1 not null generated by default as identity 不会自增长 一定要指定主键值 2 not null GENERATED ALWAYS AS IDENTITY 自增
  • Entity Framework-——数据迁移的过程

    官方文档 xff1a https docs microsoft com zh cn ef index 数据迁移的过程 文章前半部分使用的都是数据库默认的初始化对象 xff0c 即没有使用函数Database SetInitializer 修
  • JavaScript:for循环之1~100的加法运算

    问题 xff1a 求 1 100 之间的整数累加和 首先我们先分析一下这个问题的运算思路 思路分析 xff1a 1 100需要循环100次 需要一个计数器 i 需要一个存储结果的变量sum xff0c 初始值是 0 算法 xff1a 1 4
  • windows sysprep

    简单写下吧 xff0c 之前探究的windows sysprep 发现有些忘了 xff0c 这个还是很重要的 xff0c 不能忘 简单记录下 xff0c 还有其它的代码需要分析 xff0c 太忙了 sysprep是用来清理镜像的 xff0c
  • 容器镜像安全扫描之Trivy

    一 概述 1 1 Trivy简介 Trivy是一种适用于CI的简单而全面的容器漏洞扫描程序 软件漏洞是指软件或操作系统中存在的故障 缺陷或弱点 Trivy检测操作系统包 xff08 Alpine RHEL CentOS等 xff09 和应用
  • 关于天干地支及其计算

    以天干地支计算日期是我国悠良的传统文化 xff0c 最近在看如何计算人的生辰八字 xff0c 写了个程序 xff0c 但是只能算年的干支 xff0c 月 日的干支计算方法太复杂了 xff0c 望之只能却步 xff0c 还是乖乖去查万年历比较
  • [Python] ImportError: DLL load failed ... 找不到指定的模块 此类问题解决方法

    文章目录 问题定位结论补充 问题 最近升级 Python 项目 xff0c 由 Python2 7 升级到 Python3 8 3 xff0c 项目使用了 PySide2 xff0c 对于较新的Python3 8 3 PySide2 可能存