网络上很多说是虚拟环境问题,是同时装了Python2和Python3的问题。其实这些大部分都不解决问题。因为这个现象的发生不是不能import任意的库,而是无法加载DLL库。
探究真实原因
首先排查是否为虚拟环境问题,既然那么多帖子都在说这个问题。打开Windows命令行,输入pip --version
后面就跟了它的目录位置,一般结尾为\Lib\site-packages\pip
,而前面的路径就是你的Python的安装路径(from
之后 )。如果你是在虚拟环境打开的,它会在虚拟环境的目录下,只有这样才能实现pip安装的库只装进虚拟环境不装进Python默认目录。因为pip是外源库,所以安装在它的\Lib\site-packages\子目录下。右键全选,再按Enter键,打开记事本,再把命令行的所有文本粘贴过去,将该路径复制,再打开资源管理器,在地址栏粘贴,Enter,即进入了python的pip库目录。
注意两点,其一是里面有__init__.py
文件,其二是我在地址栏正要点击site-packages
即它的上一级目录。点击之后,在该目录下可以发现一系列安装在Python默认环境的外源库,包括PyQt5.点击进去,发现除了__init__.py
文件之外,还有一些奇怪的pyd
文件。
其实问题就在这里。并不是所有的库都无法加载,而是以pyd结尾的库无法加载。接着在命令行检查如下:
python
import PyQt5
PyQt5.__file__
from PyQt5 import QtCore
很明显,直到最后一个命令之前,都是正常运行的,而且PyQt5.__file__
很直接的报出了在资源浏览器打开的PyQt5目录下的__init__.py
文件。所以问题已经很清楚了,就是仅PyQt5的pyd
文件无法加载,而且报错是DLL load failed
。这些pyd
文件就是Python的DLL文件,为何无法加载呢?
解决方法
这是因为PyQt5的很多版本都是基于高版本的Visual C++,即PyQt5 实际上依赖于Visual C++ 2015-2019,这些pyd文件本质是Visual C++ 2015-2019的动态库,需要用它执行。 将其下载并安装即可。如果安装不上,需要安装KB2999226的补丁包。安装成功之后,重启,问题解决。