py2exe& win32 OLEObject错误

时间:2016-11-03 08:08:11

标签: python py2exe win32com typelib

我试图将我的程序编译成带有py2exe的exe。不幸的是,当我使用win32com从Excel复制图表并使用(Shapes.PasteSpecial(ppPasteOLEObject)将它们嵌入到PowerPoint中时,我经常会收到此错误:

File "win32com\client\__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 个答案:

答案 0 :(得分:0)

知道了!只需要包含相关的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)的网站!