首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法导入comtypes.gen

无法导入comtypes.gen
EN

Stack Overflow用户
提问于 2010-10-10 01:50:53
回答 3查看 11.9K关注 0票数 4

我在Python2.6上安装了comtype 0.6.2。如果我试试这个:

代码语言:javascript
复制
import comtypes.gen

我得到:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    import comtypes.gen
ImportError: No module named gen

然而,像import comtypesimport comtypes.client这样的其他进口产品工作得很好。

我做错了什么?

从名字上看,comtypes.gen是生成代码的吗?如果是的话,我是否需要在进口前采取某些准备步骤?我不是以管理员身份登录的。这会导致代码生成失败吗?

编辑:上面的问题是用reload(comtypes.gen)解决的(不过,我不明白如何解决)。然而,现在from comtypes.gen import IWshRuntimeLibrary不起作用。此符号应是生成代码的一部分。那么,如何生成这些代码呢?

EN

回答 3

Stack Overflow用户

发布于 2010-10-10 14:24:57

经过几次实验,我找到了解决办法。

我发现:

导入subpackage.

  • Calling "MyComLib".

  1. comtypes.client自动创建comtypes.gen comtypes.gen comtypes.client.GetModule("MyComLib"),为
  2. 生成包装器。

因此,下面的代码为我完成了这个任务:

代码语言:javascript
复制
import os
import glob 
import comtypes.client

#Generates wrapper for a given library 
def wrap(com_lib): 
    try: 
         comtypes.client.GetModule(com_lib) 
    except: 
         print "Failed to wrap {0}".format(com_lib) 

sys32dir = os.path.join(os.environ["SystemRoot"], "system32") 

#Generate wrappers for all ocx's in system32 
for lib in glob.glob(os.path.join(sys32dir, "*.ocx")): 
    wrap(lib) 

#Generate for all dll's in system32 
for lib in glob.glob(os.path.join(sys32dir, "*.tlb")): 
    wrap(lib) 

包装了相关的COM库之后,现在我就可以访问IWshRuntimeLibrary了。

票数 4
EN

Stack Overflow用户

发布于 2010-10-10 01:55:16

也许,正如它所说的,comptype中的package包并不存在。检查您的站点-packages文件夹( C:\Python26 26\Lib\site- Windows上的软件包,用安装目录替换C:\Python26 26)来代替comtype\gen子文件夹。

票数 1
EN

Stack Overflow用户

发布于 2019-01-11 18:12:20

最近,我得到了新的办公室,我不得不扩展@弗雷德里克的脚本,以再次生成所有的office对象。

代码语言:javascript
复制
import os
import glob
import comtypes.client
# You may want to change the office path
msoffice=r'C:\Program Files (x86)\Microsoft Office\root\Office16'

#Generates wrapper for a given library
def wrap(com_lib):
    try:
         comtypes.client.GetModule(com_lib)
    except:
         print("Failed to wrap {0}".format( com_lib))

sys32dir = os.path.join(os.environ["SystemRoot"], "system32")

#Generate wrappers for all ocx's in system32
for lib in glob.glob(os.path.join(sys32dir, "*.ocx")):
    wrap(lib)

#Generate for all dll's in system32
for lib in glob.glob(os.path.join(msoffice, "*.tlb")):
    wrap(lib)

for lib in glob.glob(os.path.join(msoffice, "*.olb")):
    wrap(lib)

# And a special case for Excel
excel=os.path.join(msoffice,"excel.exe")
wrap(excel)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3898670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档