How to fix "ImportError: DLL load failed" while importing win32api

How to fix "ImportError: DLL load failed" while importing win32api

我正在 Python 3.8 中设置一个自动点击器,我需要 win32api 用于 GetAsyncKeyState,但它总是给我这个错误:

>>> import win32api
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed while importing win32api: The specified module could not be found.

我在 Windows 10 Home 64x。我已经试过了

pip install pypiwin32

安装成功,但没有任何变化。我也尝试卸载并重新安装 python。我也尝试以同样的方式安装 'django',当我 import django 时它确实有效,所以我认为这只是一个 win32api 问题。

>>> import win32api

我希望输出是none,但实际输出总是那个错误^^

pypiwin32 是一个过时的发行版。卸载并安装 pywin32:

pip uninstall pypiwin32
pip install pywin32

就我而言,安装并重新安装 pywin32 没有帮助。将 [installation directory of Anaconda]\Lib\site-packages\pywin32_system32 中的两个文件复制到 C:\Windows\System32 后,就可以了。

我的环境是 python miniconda 3.8。这两个文件是 pythoncom38.dllpywintypes38.dll.

运行 Scripts\pywin32_postinstall.py - 在管理员命令提示符下安装

参考:https://github.com/mhammond/pywin32/issues/1431

编辑:用户@JoyfulPanda 发出警告:

Running this script with admin rights will also copy pythoncom37.dll, pywintypes37.dll (corresponding to the pywin32 version), into C:\WINDOWS\system32, which effectively overwrites the corresponding DLL versions from Anaconda already there. This later causes problem when openning (on Windows) "Start Menu > Anaconda3 (64-bit) > Anaconda Prompt (a_virtual_env_name)". At least Anaconda 2019.07 has pywin32 223 installed by default. Pywin32 224 may work, but 225-228 causes problem for Anaconda (2019.07)

在这个评论问题的引用中

where is this Lib\site-packages\pywin32_system32 path?

转到 C 目录,Users,你的用户名,anaconda3,Lib,site-packages,pywin32_system32。你可以很容易地找到。

C:\Users\HP\anaconda3\Lib\site-packages\pywin32_system32

对我来说,它通过将我的 pywin32 从版本 227 降级到版本 224 来工作。只需在管理员模式下的任何 shell 上键入以下命令:

pip install --upgrade pywin32==224

Lib\site-packages\pywin32_system32 不在要搜索 DLL(PATH 环境变量)的目录列表中时,就会发生这种情况。

pywin32(或其依赖项之一)在运行时将此路径添加到 PATH 变量。如果失败,或者另一个组件在 pywin32 设置后覆盖 PATH,您将收到给定的错误(ImportError:导入 win32api 时 DLL 加载失败)。

您可以尝试在开始 Python 之前扩展 shell 中的 PATH 变量。

在 Windows:

set PATH=c:\...\Lib\site-packages\pywin32_system32;%PATH%

如果这不起作用,则 PATH 可能会在运行时在 Python 程序中被覆盖。在使用 pywin32 验证其值之前,将以下行添加到您的程序中:

import os
print(os.environ["PATH"])

不得已,您可以在加载 pywin32 之前扩展 PATH 变量:

Windows:

os.environ["PATH"] = r"c:\...\pywin32_system32;" + os.environ["PATH"]

Unix 喜欢:

os.environ["PATH"] = r"/.../pywin32_system32:" + os.environ["PATH"]

根据 pywin32 github 你必须 运行

pip install pywin32

然后,你必须运行

python path\to\python\Scripts\pywin32_postinstall.py -install

取自here。对我有用!

目前目录中有两份pythoncom*.dll文件。 Pycharm 正在使用目录 C:\Windows\System32:-

中的副本

C:\Windows\System32 C:\Users\sharandi\AppData\Local\Programs\Python\Python38\Lib\site-packages\pywin32_system32

这些文件是:- pythoncom38.dll - 559 KB pywintypes38.dll - 138 KB

已解决

如果您在 conda 环境中的 miniconda 中工作。您可以使用 conda 而不是 pip 安装 pywin32。

这解决了我的问题:

conda install pywin32

我从以下位置下载并安装了最新的 Microsoft Visual C++ 2015-2019 软件包 (https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)。安装后您可能需要重新启动计算机。

然后从 conda 命令提示符激活您的虚拟环境并转到虚拟环境的 Scripts 文件夹(>cd "path of venv"/Scripts)

进入脚本文件夹后 运行 执行以下命令 “python pywin32_postinstall.py - 安装”

这会将所需的 dll 安装到虚拟环境中的相应文件夹中。

这就是我让它工作的方式!

答案在 jupyter notebook 中 github。 https://github.com/jupyter/notebook/issues/4980

conda install pywin32 对我有用。我正在使用 conda 发行版,我的虚拟环境正在使用 Python 3.8

Jupyter notebook github有问题中提到的问题。提出了多种解决方案。

对我有用的是 this answer 加上额外的第一步:

  1. pip 卸载 pywin32
  2. pip 安装 pywin32
  3. python [环境路径]/Scripts/pywin32_postinstall.py -install

对于 python 3.8.3,pywin32==225 对我有用,现有的 pywin32==228 已卸载。

所以试试这个

pip install pywin32==225

希望它能解决您的问题

我在 Anaconda 中遇到过 Jupyter 的这个问题。在遵循了所有列出的建议之后,在没有清楚地了解我在做什么的情况下,除了一件事之外,没有任何事情对我有用。我已经更新了 Anaconda 环境的索引并且我已经找回了我的内核。 The screenshot

很简单。经过多次尝试,我发现了一个解决方案。只需在 Windows 10 中键入以下命令。我正在使用 Pycharm、Python 版本 3.9

注意:- 这适用于所有 Python 版本 !!

pip uninstall pywin32

pip install pywin32

很简单。

如果不行,那就试试:-

pip uninstall win32api
pip install win32api

尝试这些命令后,再次尝试前 2 个命令。

如果还没有出现,请评论这个问题是什么问题!!

我在从 requirements.txt 重新创建 venv 时出现了这个问题。此 venv 最初是在 Ubuntu Linux 上创建的,然后在 Win 10 上重新创建。

我不得不清理环境并再次手动安装 everyrhing。对我有用吗。

版本 228 在 Windows 10

中最适合我
pip uninstall pywin32
pip install pywin32==228

已解决

我尝试了 pywin32 多种卸载和重新安装的方法,但问题仍然存在。以下方法解决了问题:

pip install --upgrade jupyter_client    
pip install --upgrade pywin32==224 --force-reinstall

我是miniconda用户。我在安装了一些 python 环境然后删除它之后首先遇到了这个错误。所以我重新安装了 jupyter 笔记本,它替换了一些丢失的文件,问题就解决了。

conda install jupyter notebook

你应该尝试我的一些(或全部)方法:

  1. 运行 终端并使用此命令:conda install pywin32.

  2. 正在从 [installation directory of Anaconda]\Lib\site-packages\pywin32_system32 复制两个文件(此文件夹中只有 2 个文件)并粘贴到 C:\Windows\System32.

    在我的例子中,这两个文件是pythoncom38.dllpywintypes38.dll(这意味着我的Python版本是3.8)。

  3. 通过此命令将 pywin32 版本降级到 225 或更低:pip install pywin32==225.

Windows 10,Python 3.8,PyWin32 v.302 使用 Anaconda

这是对我有用的方法

打开提升的命令提示符激活环境

  • Windows 键
  • 键入 cmd
  • 右键单击 Command Prompt 并单击 运行 作为管理员
  • conda activate [ENVIRONMENT]

导航到安装 PyWin32 的环境,如果使用 pip install 或 conda install 则有效

  • cd C:\Users\[USER]\anaconda3\envs\[ENVIRONMENT]\Scripts

运行安装PyWin32时添加的post安装脚本

  • python pywin32_postinstall.py -install

你好这个问题我解决如下: 1.check目录C:\Windows\System32,是否存在这些文件? pythoncom37.dll pywintypes37.dll 或 pythoncom36.dll pywintypes36.dll 编号是 python 版本 .

  1. 如果文件存在删除它。

然后这个问题就解决了

自 2022 年 2 月起,将 pywin32 的 tot 版本 303 降级即可解决该问题。

检查你的pywin32版本:

pip show pywin32

降级到版本 300:

pip install pywin32==300 --upgrade

重启 Jupyter

是的,它有效!

C:\ProgramData\Anaconda3>py Scripts\pywin32_postinstall.py -install

解析的参数是:Namespace(destination='C:\ProgramData\Anaconda3\Lib\site-packages', install=True, quiet=False, remove=False, silent=False, wait=None) 已将 pythoncom38.dll 复制到 C:\WINDOWS\system32\pythoncom38.dll 已将 pywintypes38.dll 复制到 C:\WINDOWS\system32\pywintypes38.dll 已注册:Python.Interpreter 已注册:Python.Dictionary 已注册:Python -> Software\Python\PythonCore.8\Help[None]=None -> Software\Python\PythonCore.8\Help\Pythonwin参考[None]='C:\ProgramData\Anaconda3\Lib\site-packages\PyWin32.chm' 注册帮助文件 Pythonwin 已在上下文菜单中注册 创建目录 C:\ProgramData\Anaconda3\Lib\site-packages\win32com\gen_py 无法安装快捷方式 - 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 3.8' 不是文件夹 pywin32 扩展已成功安装。

您应该进入文件夹 {python folder path}/Lib/site-packages/pywin32_system32 并将 pythoncomXX.dllpywintypesXX.dll 复制到文件夹 C:/Windows/System32.

如果你使用的是虚拟环境,那么{python folder path}就是虚拟环境使用的python文件夹,否则就是全局python所在的文件夹。比如我用conda创建了一个虚拟环境叫Frameless-Window,在这个虚拟环境中安装包pywin32,那么我电脑上的{python folder path}应该是D:/Anaconda/envs/Frameless-Window

将dll复制到System32文件夹时要格外小心。如果文件夹中有同名的dll,而你的其他虚拟环境中的pywin32可能会用到这两个dll,更换原来的dll可能会导致这个虚拟环境出现同样的ImportError问题。经过测试,发现227、228、300版本的pywin32的dll可以相互替换,301、302、303、304版本的pywin32的dll也可以相互替换,但是如果dll 300版本的替换为301版本的dll,会引发ImportError。