ошибка py2exe & win32 OLEObject

Я попытался скомпилировать свою программу в exe с py2exe. К сожалению, поскольку я использую win32com для копирования диаграмм из Excel и встраивания их в PowerPoint с помощью(Shapes.PasteSpecial(ppPasteOLEObject), я постоянно получаю эту ошибку:

File "win32comclient__init__.pyc", line 170, in __getattr__
AttributeError: ppPasteOLEObject`.

Гуглить на самом деле не помогло. Скрипт отлично работает, когда я запускаю его на python, поэтому я знаю, что проблема с win32com. Использование makepy.py включение typelibs также не помогло, но, возможно, мой setup.pyпросто неправильно. Так вот оно:

import sys
from distutils.core import setup
import py2exe
from glob import glob
from os.path import normpath
import matplotlib

sys.setrecursionlimit(5000)
data_files=[("Microsoft.VC90.CRT",glob(normpath(
    r'C:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT/*.*'))),
    ("images",glob(normpath("images/*.PNG"))),
    ("ppttemplate",glob(normpath("ppttemplate/*.pptx")),
    (".",normpath("C:/windows/system32/ole32.dll")),
    (".",normpath("C:/Anaconda2/envs/py27/Library/bin/MSVCP90.dll")))
    ]
data_files.extend(matplotlib.get_py2exe_datafiles())

setup(
    data_files=data_files,
    console=['Main.py'],
    options={"py2exe":{"includes":["lxml.etree","lxml._elementpath","gzip",
                       "sip","PyQt4.QtGui","PyQt4.QtCore","matplotlib"],
                       "excludes":["Tkinter"],
                       "typelibs":[('{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}', 0, 2, 8),
                                   ('{00020430-0000-0000-C000-000000000046}', 0, 2, 0)]
                                   }
                                   }
                                   )

Заранее спасибо за помощь!

1 ответ

  1. Понял! Нужно просто включить соответствующие библиотеки DLL и установить skip_archive=True… (Я включил все, на что жаловался py2exe).

    Путем добавления:

    sys.path.append("C:\Program Files\Microsoft VisualStudio9.0\VC\redist\x86\Microsoft.VC90.CRT")
    sys.path.append("C:\windows\system32")
    

    перед data_filesстрокой и добавлением все system32к data_filesи добавлением skip_archive=Trueвнутри py2exe:нее сработало!
    Надеюсь, он работает на разных компьютерах, а также…

    Руководство, которое я использовал, было на веб-сайте [py2exe] ( http://www.py2exe.org/index.cgi/IncludingTypelibs )!