700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > [Python] ImportError: DLL load failed ... 找不到指定的模块 此类问题解决方法

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

时间:2019-04-22 05:06:00

相关推荐

[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 x64Python: 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 工具(安装了VS才有,或者网上下载吧)。

比如我遇到的:安装了 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 重新安装 ,版本正确了,错误消失了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。