正在加载中...

如何在 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 版本不变,以上~~

posted @ 2022-06-03 19:16  之一Yo  阅读(3703)  评论(0编辑  收藏  举报