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

问题

最近升级 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 重新安装 ,版本正确了,错误消失了

当在运行Python脚本时出现"ImportError: DLL load failed: 不到指定模块"错误时,这通常表示一个模块无法被正确加载。这可能是由于以下几个原因之一导致的: 1. 缺少所需的库或模块:这可能是由于你的环境中缺少必要的库或模块导致的。你需要确保你已经正确安装了所有相关的依赖项和库。你可以使用包管理工具(如pip或conda)来安装缺失的模块。如果你已经安装了模块,但仍然出现错误,可能是由于库文件未正确配置。 2. 环境变量设置错误:有时,错误的环境变量设置可能导致模块无法正确加载。你需要确保你的环境变量设置正确,并且指向了正确的模块路径。 3. 模块版本不兼容:如果你的脚本使用了一个不兼容的模块版本,可能会导致加载失败。在这种情况下,你可以尝试升级或降级模块的版本,以到与你的脚本兼容的版本。 为了解决这个问题,你可以尝试以下几个步骤: 1. 确保你已经正确安装了所需的库和模块。你可以使用包管理工具(如pip或conda)来安装缺失的模块。 2. 检查你的环境变量设置,确保它们指向了正确的模块路径。 3. 如果你使用的是第三方库,尝试升级或降级模块的版本,以到与你的脚本兼容的版本。 4. 如果以上步骤都没有解决问题,可以考虑重新安装Python环境,并确保按照正确的步骤安装所需的库和模块。 总之,"ImportError: DLL load failed: 不到指定模块"错误通常是由于模块无法正确加载导致的。你可以通过安装缺失的模块、检查环境变量设置、调整模块版本或重新安装Python环境来解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python ImportError: DLL load failed while import cv2: 不到指定模块。](https://download.csdn.net/download/zz975896590/85710278)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【python】报错:ImportError: DLL load failed: 不到指定模块 的详细解决办法](https://blog.csdn.net/weixin_43289135/article/details/120097802)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Pycharm中出现ImportError:DLL load failed:不到指定模块解决方法](https://download.csdn.net/download/weixin_38738977/13782275)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值