我正在尝试使用一个使用win32com库的Python API。我正在使用该网站提供的示例代码,该代码在一台计算机上正常工作但在另一台计算机中无效。我在Windows 7上运行它。 具体来说,它在检查一些二进制文件时失败了:
import win32event
import win32com.client
from win32com.client import constants
win32com.client.gencache.EnsureModule('{51F35562-AEB4-4AB3-99E8-AC9666344B64}', 0, 4, 0)
win32com.client.gencache.EnsureModule('{4D454F08-B770-11D4-A18E-00C04F6BB385}', 0, 17, 12801)
我一直在寻找互联网但是虽然有类似的问题,我还没有找到问题的答案。 起初我虽然是因为Windows或Python发行版中有32-64位差异。我检查了两个计算机(64位Windows 7)中的Windows版本是否相同,而且我使用的是相同的Python版本。我还没有发现哪个模块对应于EnsureModule()中的代码。
我是这方面的新手,我不太了解COM对象,很遗憾我的描述不够准确。
提前致谢。
编辑:
win32com的导入效果很好。它不会返回错误,例如使用引用为可能重复的问题的代码:
from win32com.client import Dispatch
xlApp = win32com.client.Dispatch("Excel.Application")
这不会返回任何错误。
显示的确切代码和错误是:
win32com.client.gencache.EnsureModule('{51F35562-AEB4-4AB3-99E8-AC9666344B64}', 0, 4, 0)
Traceback (most recent call last):
File "<ipython-input-2-18c1ec54bb40>", line 1, in <module>
win32com.client.gencache.EnsureModule('{51F35562-AEB4-4AB3-99E8-AC9666344B64}', 0, 4, 0)
File "C:\Users\jredondo\AppData\Local\Continuum\anaconda3\lib\site-packages\win32com\client\gencache.py", line 518, in EnsureModule
module = MakeModuleForTypelib(typelibCLSID, lcid, major, minor, progressInstance, bForDemand = bForDemand, bBuildHidden = bBuildHidden)
File "C:\Users\jredondo\AppData\Local\Continuum\anaconda3\lib\site-packages\win32com\client\gencache.py", line 287, in MakeModuleForTypelib
makepy.GenerateFromTypeLibSpec( (typelibCLSID, lcid, major, minor), progressInstance=progressInstance, bForDemand = bForDemand, bBuildHidden = bBuildHidden)
File "C:\Users\jredondo\AppData\Local\Continuum\anaconda3\lib\site-packages\win32com\client\makepy.py", line 223, in GenerateFromTypeLibSpec
tlb = pythoncom.LoadRegTypeLib(typelibCLSID, major, minor, lcid)
com_error: (-2147319779, 'Library not registered.', None, None)
我曾尝试使用不同的Python版本(32位和64位的Python 2.7和3.6)在7台不同的计算机上使用Windows 7(它应该是公司订阅的同一个发行版),其中有4台工作正常好吧,在其他三个中它返回上面描述的 com_error 。
我安装了与两台不同计算机相同的版本(32位Python 3.5.2),并且在第一台计算机中,两条线路都运行良好,而在第二台计算机中,只有第一台机器正常工作,第二台计算机抛出错误。对于我的意思是:
win32com.client.gencache.EnsureModule('{51F35562-AEB4-4AB3-99E8-AC9666344B64}', 0, 4, 0)
win32com.client.gencache.EnsureModule('{4D454F08-B770-11D4-A18E-00C04F6BB385}', 0, 17, 12801)
可能存在与Windows更新相关的问题。我还没有发现它与EnsureModule()中的串行代码模块完全对应。