Не могу импортировать comtypes.gen - PullRequest
4 голосов
/ 10 октября 2010

У меня установлены Python 2.6.2 на Python 2.6.Если я попробую это:

import comtypes.gen

, я получу:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    import comtypes.gen
ImportError: No module named gen

Другие операции импорта, такие как import comtypes и import comtypes.client, работают нормально.

Что я делаю не так?

Из названия кажется comtypes.gen генерируется код?Если да, нужно ли выполнять определенные подготовительные действия перед импортом?Я не вошел в систему как администратор.Может ли это привести к сбою генерации кода?

Редактировать: Вышеприведенная проблема решена с reload(comtypes.gen) (хотя я не понимаю, как).Однако теперь from comtypes.gen import IWshRuntimeLibrary не работает.Этот символ должен быть частью сгенерированного кода.Так как же получить этот код для генерации?

Ответы [ 3 ]

4 голосов
/ 10 октября 2010

Что ж, после некоторых экспериментов у меня есть решение.

Я обнаружил, что:

  1. При импорте comtypes.client автоматически создается подпакет comtypes.gen.
  2. При вызове comtypes.client.GetModule("MyComLib") создается оболочка для "MyComLib".

Так что следующий код выполнил за меня работу:

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 просто отлично.

1 голос
/ 10 октября 2010

Возможно, как говорится, пакета package gen в comptypes не существует.Проверьте папку site-packages (C: \ Python26 \ Lib \ site-packages в Windows, замените C: \ Python26 вашей установочной директорией) на наличие подпапки comtypes \ gen.

0 голосов
/ 11 января 2019

недавно я получил новый офис, и мне пришлось расширить скрипт @frederick, чтобы снова генерировать все офисные объекты.

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)
...