Python “如何修复”;导入错误:DLL加载失败“;导入win32api时

Python “如何修复”;导入错误:DLL加载失败“;导入win32api时,python,python-3.x,winapi,pip,pywin32,Python,Python 3.x,Winapi,Pip,Pywin32,我正在Python 3.8中设置一个自动单击程序,我需要用于GetAsyncKeyState的win32api,但它总是给我以下错误: >>> import win32api Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: DLL load failed while importing win32api: The specified

我正在Python 3.8中设置一个自动单击程序,我需要用于GetAsyncKeyState的win32api,但它总是给我以下错误:

>>> 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.
它成功地安装了,但没有任何变化。我也尝试卸载和重新安装python。我也尝试过以同样的方式安装“django”,当我导入django时,它实际上可以工作,所以我认为这只是win32api的问题

>>> import win32api

我希望输出为无,但实际输出总是错误^^

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

pip uninstall pypiwin32
pip install pywin32

对于我来说,安装并重新安装pywin32没有帮助。将这两个文件从
[Anaconda的安装目录]\Lib\site packages\pywin32\u system32
复制到
C:\Windows\system32
后,它就可以工作了


我的环境是miniconda中的python 3.8。这两个文件是
pythoncom38.dll
pywintypes38.dll
runscripts\pywin32\u postinstall.py-在管理命令提示符下安装

参考:

编辑:User@JoyfulPanda发出警告:


使用管理员权限运行此脚本还会将pythoncom37.dll、pywintypes37.dll(对应于pywin32版本)复制到
C:\WINDOWS\system32
,从而有效地覆盖已有Anaconda的相应dll版本。这会在打开(Windows上)“开始菜单>蟒蛇3(64位)>蟒蛇提示(虚拟环境名称)”时导致问题。默认情况下,至少Anaconda 2019.07安装了pywin32 223。Pywin32 224可能有效,但225-228会给蟒蛇带来问题(2019.07)


在该评论问题的参考中

这个Lib\site packages\pywin32\u system32路径在哪里

转到C目录,用户,用户名,anaconda3,Lib,站点包,pywin32_system32。你很容易找到


C:\Users\HP\anaconda3\Lib\site packages\pywin32\u system32

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

pip install --upgrade pywin32==224

Lib\site packages\pywin32\u system32
不在要搜索DLL(路径环境变量)的目录列表中时,会发生这种情况

pywin32(或其依赖项之一)在运行时将此路径添加到path变量。如果此操作失败,或者在pywin32设置路径后另一个组件正在重写该路径,您将收到给定的错误(ImportError:导入Win32 API时DLL加载失败)

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

在Windows上:

set PATH=c:\...\Lib\site-packages\pywin32_system32;%PATH%
在类Unix系统上:

export PATH=c:\...\Lib\site-packages\pywin32_system32:$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 github,您必须运行

pip install pywin32
python path\to\python\Scripts\pywin32_postinstall.py -install
在那之后,你必须跑

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

摘自。为我工作

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

C:\Windows\System32 C:\Users\sharandi\AppData\Local\Programs\Python38\Lib\site packages\pywin32\u system32

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

已解决

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

这解决了我的问题


安装PyWi32

< P> i下载并安装了最新的微软Visual C++ 2015-2019包 (). 安装后,您可能必须重新启动计算机

然后从conda命令提示符激活您的虚拟环境并转到虚拟环境的脚本文件夹(>cd“venv路径”/Scripts)

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

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


我就是这样让它工作的

答案在jupyter笔记本github中。

conda安装pywin32
适合我。我使用的是conda发行版,我的虚拟环境使用的是Python3.8,问题中提到了这个问题。提出了多种解决方案

对我有效的是额外的第一步:

  • pip卸载pywin32
  • pip安装pywin32
  • python[environment path]/Scripts/pywin32_postinstall.py-install

  • 对于python3.8.3,pywin32==225适合我,现有的pywin32==228被卸载

    因此,请尝试此-->pip安装pywin32==225


    希望它能解决您的问题

    谢谢,但不幸的是,一切都没有改变。。以下是我所做的
    成功卸载pypiwin32-223 C:\Users\gfroz\AppData\Local\Programs\Python\Python38-32\Scripts>pip安装pywin32的要求已经满足:pywin32在C:\Users\gfroz\AppData\Local\Programs\Python\Python38-32\lib\site软件包(225)
    ,然后
    >>导入Win32 API回溯(最后一次调用):文件“”,第1行,在导入win32api:Importable trovare il modulo specificato时,DLL加载失败尝试重新安装;在您对不同软件包进行了所有实验之后,DLL可能会被破坏:
    pip安装——忽略已安装的pywin32
    非常感谢!实际上,当我刚安装pywin32时,它不起作用,但后来我在脚本文件夹
    pywin32\u postinstall.py-install
    ,然后我尝试导入win32api
    ,但没有出现错误!pywin32_postinstall.py所做的所有工作都是将pywintypes[pyton version].dll和pythoncom[pyver].dll从\Lib\site packages\pywin32_system32\复制到主目录中。实际上,最好只是手动复制到\Library\bin。然后一切都会好起来。在哪里