Python 2.6中导入win32api出错

56

在 Windows 操作系统(64 位)下运行 Python26 时,我遇到了如下错误:

import win32api" error in Python 2.6: pywintypes26.dll
或者
pythoncom26.dll missing
ImportError: DLL load failed: The specified module could not be found.

我已经完成了Python26的msi安装,所有的dll文件都可以在C:\Python26\Lib\site-packages\pywin32_system32下找到。


5
把 pywintypes26.dll 和 pythoncom26.dll 移动或复制到 c:\Python26\Lib\site-packages\win32 目录下即可解决问题! - Vin.X
1
刚在Python 2.7.14上遇到了这个问题,运行pip uninstall pywin32,然后再运行pip install pywin32就解决了,尽管我收到了一个警告,提示pip卸载'distutils'项目已经被弃用。 - Mark Allen
这听起来像是Python安装问题;最好的解决方案应该是重新安装Python(如果可能的话)。我只在一台机器上遇到过这个问题,在重新安装Python后立即解决了。 - Jon
我在Python 2.7.12上遇到了这个问题,运行pip uninstall pywin32然后运行pip install pywin32对我没有用。Dave Bremer下面的答案确实有效。 - Ross Bencina
12个回答

79
在我将 C:\Python26\Lib\site-packages\pywin32_system32 中的 pywintypes26.dll 和 pythoncom26.dll 复制到 C:\Python26\Lib\site-packages\win32 后,问题得到解决!

1
我真的很想知道为什么会报告缺少dll文件,但这个解决方案也适用于我的问题。(记录一下,我还安装了另一个版本的Python,也许安装程序中有一个错误?) - daramarak
4
这个问题(以及解决方案)在Python2.7的217和218.4安装程序中仍然存在。真的很令人失望。 - Anti Earth
2
同样的事情也发生在 Python 3.4 的218.5安装程序中。 - simonzack
7
我希望你在回答中也能提到pywintypes26.dll的来源(我看到它在原始帖子中)。 - Jonathan
5
仍然发现3.6和220安装程序存在问题。此外,“dll复制技巧”似乎不起作用。 - Batman0730
显示剩余2条评论

38

我也遇到了导入win32api的问题。

pywin32的安装后脚本失败了,这会复制pythoncom26.dllpythoncomloader26.dllpywintypes26.dll等文件。我亲自运行了它,我的安装问题得到了解决。

python scripts\pywin32_postinstall.py -install

4
这可能需要在Win7(64位)上拥有管理员权限,否则会出现“您没有安装COM对象的权限”的错误,但仍会报告“pywin32扩展已成功安装”。 - handle
1
这在某种程度上解决了我的问题。如果我在当前目录中使用python运行:python C:\mypath\myscript.py,那么安装后脚本似乎已经完成了它的工作,并且按预期工作。另一方面,如果我在当前目录中运行目标脚本:C:\mypath\python myscript.py,那么后置脚本就无法工作,我不得不像被接受的答案建议的那样手动将DLL移动到win32 site-packages目录中。 - OxCantEven

11
我在安装64位Python 3.4.2时遇到了类似的问题。我从http://www.lfd.uci.edu/~gohlke/pythonlibs/运行了安装可执行文件pywin32-219.win-amd64-py3.4.exe。
该网站清楚地说明:
“Python 3.4用户必须手动从提升的命令提示符中运行python.exe Scripts\pywin32_postinstall.py -install。”
第一次我没有这么做;我从普通提示符安装,得到以下反馈:
c:\python34>python.exe Scripts\pywin32_postinstall.py -install
Copied pythoncom34.dll to C:\Python34\pythoncom34.dll
Copied pywintypes34.dll to C:\Python34\pywintypes34.dll
You do not have the permissions to install COM objects.
The sample COM objects were not registered.
etc.etc.
Finishing with "The pywin32 extensions were succesfully installed" ... 

我只读了最后一句话,然后运行了一些代码,结果出现了这些dll加载失败的错误。

于是,我进行了一些研究,并启动了提升权限的命令提示符(如何操作:请参见“http://www.sevenforums.com/tutorials/783-elevated-command-prompt.html”),然后再次运行:

c:\python34>python.exe Scripts\pywin32_postinstall.py -install
Copied pythoncom34.dll to C:\Windows\system32\pythoncom34.dll
Copied pywintypes34.dll to C:\Windows\system32\pywintypes34.dll
Registered: Python.Interpreter
Registered: Python.Dictionary
Registered: Python
-> Software\Python\PythonCore\3.4\Help[None]=None
-> Software\Python\PythonCore\3.4\Help\Pythonwin Reference[None]='C:\\Python34\\Lib\\site-packages\\PyWin32.chm'
Pythonwin has been registered in context menu
Shortcut for Pythonwin created
Shortcut to documentation created
The pywin32 extensions were successfully installed.

现在我的代码可以愉快地运行了(就这个问题而言...唉,还有很多其他的事情要做)。


7

以管理员身份运行安装程序,即可成功:

  • 右键单击pywin32-installer.exe文件
  • 选择“以管理员身份运行”

这应该是每个人的第一次尝试(因为它最容易)。如果您已经运行了安装程序,请以管理员身份再次运行它,问题就解决了。适用于python35。 - Radical Edward

7

如上所建议,安装后脚本未运行,这个问题可能会在从wheel安装时出现(正如我遇到的情况)

python scripts\pywin32_postinstall.py -install

如果您在安装过程中通过Wheels遇到此问题,则从此处安装可以解决上述问题。 https://pypi.python.org/pypi/pypiwin32

这个问题已经解决了。我之前使用的是 Python 2.7.9 x86 版本。 - Jake Levitt

2

我可以通过删除所有已安装的Python3.4版本(在安装3.4.2之前忘记卸载3.4.1),删除C:\ Python34,并在安装Python 3.4.2 pywin32-219.win32-py34.exe后,可以轻松安装和调用,不需要复制DLL文件!


同意;你只需要重新安装Python。 - Jon

2

安装程序中似乎存在漏洞。票证中推荐的解决方法与Dave Bremer提出的相同。


1

起初我使用pip在anaconda环境中安装pywin32,无论我怎么做都失败了。经过反复尝试,我发现正确的方法是使用anaconda包管理器安装pywin32:

conda install pywin32

1
如果上述方法未能解决问题,你可能还缺少 msvcr100.dll 文件。它可能在你的 \System32\ 文件夹中,或者更可能在你的 c:\PythonXX\Lib\site-packages\win32\ 文件夹中。
对我来说,这个方法在搜索了几个小时后终于解决了问题,尽管看起来导入仍然没有被正确解析(PyCharm 仍然给我一个波浪线下划线),但它可以工作。

1

我总是安装Active State Python发行版,它会为您安装win32包并正确配置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接