【问题标题】:How to fix "ImportError: DLL load failed" while importing win32api如何在导入 win32api 时修复“ImportError: DLL load failed”
【发布时间】:2020-02-24 23:32:48
【问题描述】:

我在 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

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

【问题讨论】:

  • 确保没有依赖冲突!我通过 pip 安装了 pywin32,它与我的 Conda 安装冲突。
  • 我认为这是因为缺少pywin32 扩展。

标签: python python-3.x winapi pip pywin32


【解决方案1】:

已解决

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

这解决了我的问题:

conda install pywin32

【讨论】:

  • 谢谢,这解决了我的问题。我正在使用 miniconda。
  • 在 Win10、Python 3.9 和 Miniforge 上为我工作。
  • 我必须在给定的 conda 环境中安装它(而不是在我运行 jupyter notebook 的环境中)。尽管如此,它仍然有效!
  • 我们将以你的名义举办一个节日!赢得 10 64 位。浪费了几个小时......但多亏了这个,问题解决了。 conda install pywin32 在我激活的 env 中没有影响 system32,它避免了运行 postinstall 脚本的需要,该脚本因未找到 wintypes DLL 而失败。应该不可能进入这种荒谬的状态(我不知道它是怎么发生的),也不应该花费这么多的工作才能摆脱。不过谢谢谢谢谢谢。
【解决方案2】:

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

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

【讨论】:

  • Lib\site-packages\pywin32_system32 路径在哪里?
  • 它对我的问题有效。我也使用 Pyhon3.8。我想知道为什么会这样?
  • Python 3.8 下同样的问题。解决方案有效,但我必须在我的虚拟环境Lib 文件夹下获取文件
  • 这个确实帮助了我。我猜问题出在 Python 3.8 版本上。
  • 此信息有所帮助,但将 3rd 方的东西放在 C:\Windows\System32 中会导致未来的麻烦。例如,如果 pywin32 更新 DLL 并且在 pip 更新后您没有将它们再次复制到 C:\Windows\System32 会发生什么。你会得到一个不一致的系统。此外,计算机的所有程序都会“看到”这些 DLL。您应该根据需要设置 PATH。
【解决方案3】:

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

pip install --upgrade pywin32==224

【讨论】:

  • 我在Python3.8下得到这个错误:找不到满足pywin32==224要求的版本(来自版本:225、226、227、228)
  • 对于python 3.8,如果找不到pywin32==224,试试pywin32==225。它对我有用。
  • @Guido 你必须激活基础环境conda activate base
  • 你不能激活基础环境,只激活你想要使用的环境。从 228 降级到 225 对我有用。 pip install --upgrade pywin32==225 worked
  • pip install pywin32==225 也适用于 Python 3.9
【解决方案4】:

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

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

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

以管理员权限运行此脚本还会将 pythoncom37.dll、pywintypes37.dll(对应于 pywin32 版本)复制到 C:\WINDOWS\system32,从而有效地覆盖来自 Anaconda 的相应 DLL 版本。这稍后会在打开(在 Windows 上)“开始菜单 > Anaconda3(64 位)> Anaconda Prompt (a_virtual_env_name)”时导致问题。至少 Anaconda 2019.07 默认安装了 pywin32 223。 Pywin32 224 可能工作,但 225-228 会导致 Anaconda 出现问题(2019.07)

【讨论】:

  • 要运行pywin32_postinstall.py,你需要python pywin32_postinstall.py -install,否则你会得到一个关于winreg的importerror
  • 以管理员权限运行此脚本还会将pythoncom37.dllpywintypes37.dll(对应于pywin32版本)复制到`C:\WINDOWS\system32`中,这有效地覆盖了相应的DLL版本蟒蛇已经在那里。这稍后会在打开(在 Windows 上)“开始菜单 > Anaconda3(64 位)> Anaconda Prompt (a_virtual_env_name)”时导致问题。至少 Anaconda 2019.07 默认安装了 pywin32 223。 Pywin32 224 可能工作,但 225-228 会导致 Anaconda (2019.07) 出现问题。
  • pip install --upgrade pywin32==225 为我工作..Thx
  • @Binu 解决方案截至 2021 年 6 月 4 日也对我有用
【解决方案5】:

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

conda install pywin32 为我工作。我正在使用 conda 分发,而我的虚拟环境正在使用 Python 3.8

【讨论】:

  • 在 python 3.9.5 中为我工作
【解决方案6】:

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

pywin32(或其依赖项之一)在运行时将此路径添加到 PATH 变量中。如果这失败了,或者其他组件在 pywin32 设置后覆盖了 PATH,您将收到给定的错误(ImportError: DLL load failed while importing win32api)。

您可以在启动 Python 之前尝试在 shell 中扩展 PATH 变量。

在 Windows 上:

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

在类 Unix 系统上:

export PATH=c:\...\Lib\site-packages\pywin32_system32:$PATH

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

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

作为最后的手段,您可以在加载 pywin32 之前扩展 PATH 变量:

窗户:

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

类Unix:

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

【讨论】:

  • 我已将 'pywin32_system32' 的绝对路径添加到 os.environ['PATH'] 中,但仍然无法导入 win32api。只有将这两个dll复制到system32才能工作。
  • 可能是因为 3.8 中的这一变化:Windows 上扩展模块和加载了 ctypes 的 DLL 的 DLL 依赖关系现在可以更安全地解决。仅在系统路径、包含 DLL 或 PYD 文件的目录以及使用 add_dll_directory() 添加的目录中搜索加载时依赖项。具体来说,PATH 和当前工作目录不再使用,对它们的修改将不再对正常的 DLL 解析产生任何影响。
  • 感谢背景。此外,我不得不降级到 224 版。
【解决方案7】:

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

所以试试这个

pip install pywin32==225

希望它能解决你的问题

【讨论】:

  • 对我来说,类似的方法很有效。我从 227 降级到 226。而且像 301 这样的较新版本对我没有锻炼。
【解决方案8】:

根据pywin32 github你必须运行

pip install pywin32

然后,你必须运行

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

取自here。为我工作!

【讨论】:

  • 我认为这是所有可用解决方案中最正统的解决方案。它之所以有效,是因为需要安装额外的 pywin32 扩展。
【解决方案9】:

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

pip uninstall pypiwin32
pip install pywin32

【讨论】:

  • 谢谢你,但不幸的是没有任何改变。这就是我所做的Successfully uninstalled pypiwin32-223 C:\Users\gfroz\AppData\Local\Programs\Python\Python38-32\Scripts&gt;pip install pywin32 Requirement already satisfied: pywin32 in c:\users\gfroz\appdata\local\programs\python\python38-32\lib\site-packages (225) 然后 &gt;&gt;&gt; import win32api Traceback (most recent call last): File "&lt;stdin&gt;", line 1, in &lt;module&gt; ImportError: DLL load failed while importing win32api: Impossibile trovare il modulo specificato.
  • 尝试重新安装;在您使用不同的软件包进行所有实验之后,DLL 可能会被破坏:pip install --ignore-installed pywin32
  • 非常感谢!实际上,当我刚安装 pywin32 时它首先不起作用,然后我在脚本文件夹中写入 pywin32_postinstall.py -install,然后我尝试 import win32api 并且没有出现错误!
  • 所有 pywin32_postinstall.py 所做的都是将 pywintypes[pyton version].dll 和 pythoncom[pyver].dll 从 \Lib\site-packages\pywin32_system32\ 复制到主目录中。实际上最好手动复制到 \Library\bin。然后一切正常。
【解决方案10】:

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

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

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

【讨论】:

    【解决方案11】:

    228 版在 Windows 10 中最适合我

    pip uninstall pywin32
    pip install pywin32==228
    

    【讨论】:

      【解决方案12】:

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

      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

      【讨论】:

        【解决方案13】:

        在此评论问题的参考中

        这个 Lib\site-packages\pywin32_system32 路径在哪里?

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

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

        【讨论】:

          【解决方案14】:

          当前目录中有两个 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

          【讨论】:

            【解决方案15】:

            我从以下位置下载并安装了最新的 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)

            进入 Scripts 文件夹后,运行以下命令 “python pywin32_postinstall.py -install”

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

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

            【讨论】:

              【解决方案16】:

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

              【讨论】:

                【解决方案17】:

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

                我不得不清除环境并再次手动安装everyrhing。为我做了这项工作。

                【讨论】:

                  【解决方案18】:

                  已解决

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

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

                  【讨论】:

                    【解决方案19】:

                    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 时添加的安装后脚本

                    • python pywin32_postinstall.py -install

                    【讨论】:

                      【解决方案20】:

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

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

                      pip uninstall pywin32
                      
                      pip install pywin32
                      

                      这很简单。

                      如果这不起作用,请尝试:-

                      pip uninstall win32api
                      pip install win32api
                      

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

                      如果还没有来,那么评论这个问题是什么问题!!

                      【讨论】:

                        【解决方案21】:

                        我是 miniconda 用户。在安装了一些python环境然后删除它之后,我首先得到了这个错误。所以我重新安装了 jupyter notebook,它替换了一些丢失的文件,问题得到了修复。

                        conda install jupyter notebook
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 2019-06-02
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2020-06-30
                          • 2021-04-23
                          相关资源
                          最近更新 更多