Python 3.4:ImportError:没有名为win32api的模块
我在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 个回答
你可以在win32文件夹里创建一个__init__.py文件,然后进入win32com文件夹,修改里面的__init__.py文件。把原来写的import win32api这一行,改成from win32 import win32api。
我在用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(具体方法可以参考这里和这里)。
我昨天在Windows 7上用Python 3.6.1遇到了同样的错误,后来通过运行“pip install pypiwin32”来解决了这个问题。
这是库本身的一个错误,可能他们在创建这个库的时候用了不同的Python版本。
他们想要导入的是site-packages\win32\win32api.pyd这个文件,但win32文件夹不在Python搜索的路径里,而site-packages是包含在内的。
试着把import win32api
(在win32com\__init__.py文件里)换成from win32 import win32api
。
你可以从这里安装 pywin32:
http://sourceforge.net/projects/pywin32/files/pywin32/
安装的版本取决于你使用的操作系统和 Python 的版本。一般来说,32位的版本在32位和64位的操作系统上都能正常工作。
更新:现在可以去这里下载:https://github.com/mhammond/pywin32/releases