Python 3.4:ImportError:没有名为win32api的模块

18 投票
7 回答
96343 浏览
提问于 2025-04-18 16:56

我在Windows 7上使用Python 3.4。为了打开一个doc文件,我用了这段代码:

import sys
import win32com.client as win32

word = win32.Dispatch("Word.Application")
word.Visible = 0
word.Documents.Open("MyDocument")
doc = word.ActiveDocument

我不明白为什么每次都会出现这个错误:

ImportError: no module named win32api

虽然我已经从http://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32安装了pywin32,并且我也检查了我导入的路径。我还尝试重新安装pywin32,但错误依然没有消失。

7 个回答

1

你可以在win32文件夹里创建一个__init__.py文件,然后进入win32com文件夹,修改里面的__init__.py文件。把原来写的import win32api这一行,改成from win32 import win32api。

2

我在用Python 2.7(64位)导入win32com.client时也遇到了同样的错误。我同意TulkinRB的看法,似乎是路径的问题,但他建议的解决办法对我没用,因为我也无法导入win32。

也许我的解决办法在Python 3.4中也能奏效。

最后,我按照Rina Rivera的建议,以管理员身份从SourceForge安装了.exe,这让我可以在IDLE中导入win32com.client,但在我最开始想运行的脚本中却不能。

最终,我发现当我以管理员身份安装并打开IDLE时,sys.path中有3个不同的路径被扩展了,但在执行脚本时这些路径并没有被应用。通过在我的脚本中扩展sys.path,我成功解决了执行时的导入错误:

import sys
sys.path.extend(('C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\Python27\\lib\\site-packages\\Pythonwin'))

最后,如果你想要一个不只是临时的解决办法,可以通过设置IDLESTARTUP或PYTHONSTARTUP变量来永久扩展sys.path(具体方法可以参考这里这里)。

13

我昨天在Windows 7上用Python 3.6.1遇到了同样的错误,后来通过运行“pip install pypiwin32”来解决了这个问题。

17

这是库本身的一个错误,可能他们在创建这个库的时候用了不同的Python版本。

他们想要导入的是site-packages\win32\win32api.pyd这个文件,但win32文件夹不在Python搜索的路径里,而site-packages是包含在内的。

试着把import win32api(在win32com\__init__.py文件里)换成from win32 import win32api

19

你可以从这里安装 pywin32:

http://sourceforge.net/projects/pywin32/files/pywin32/

安装的版本取决于你使用的操作系统和 Python 的版本。一般来说,32位的版本在32位和64位的操作系统上都能正常工作。

更新:现在可以去这里下载:https://github.com/mhammond/pywin32/releases

撰写回答