我试图将我的程序编译成带有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)]
}
}
)
提前感谢您的帮助!
答案 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)的网站!