如何在 python 中解决 ImportError: DLL load failed while importing win32api
问题描述
安装完 pywin32
之后,如果直接在代码中 import win32api
可能会报下述错误:
ImportError: DLL load failed while importing win32api
在 stackoverflow 上关于该问题有各种各样的回答,有的好用,有的并不好使,所以本篇博客将会探讨解决这个问题的正确姿势。
问题解决
假设我们在终端输入 conda create -n Frameless-Window python=3.9
,创建一个 python 版本为 3.9,名字为 Frameless-Window
的虚拟环境,然后激活该虚拟环境并使用 pip install pywin32
安装最新版本(此处为 304)的 pywin32
。进入文件夹 D:/Anaconda/envs/Frameless-Window/Lib/site-packages/pywin32_system32
,会发现里面有两个 dll 文件,如下图所示:
将这两个文件复制到 C:/Windows/System32
,不出意外的话就不会再报 ImportError 错误了。如果没有使用虚拟环境,可以在 D:/Python/Lib/site-packages/pywin32_system32
找到这两个 dll。
如果 C:/Windows/System32
中已经存在同名的 dll 了,说明你的电脑上的全局 python 环境或者另一个虚拟环境也依赖于 pywin32
,由于 pywin32
版本可能不同,如果直接替换掉这两个 dll,可能会导致他们出现 ImportError 错误。经过测试,发现 227、228 和 300 版本的 pywin32
的这两个 dll 可以互相替换,301、302、303 和 304 也可以互相替换,如果将 300 版本的 dll 替换为 301 版本的 dll,就会出现 ImportError 错误。所以,最佳实践就是保持 pywin32 版本不变,以上~~