py2exe & win32 OLEObject 错误
py2exe & win32 OLEObject error
我试图用 py2exe 将我的程序编译成 exe。不幸的是,当我使用 win32com 从 Excel 复制图表并使用 (Shapes.PasteSpecial(ppPasteOLEObject)
将它们嵌入到 PowerPoint 中时,我经常收到此错误:
File "win32com\client\__init__.pyc", line 170, in __getattr__
AttributeError: ppPasteOLEObject`.
谷歌搜索并没有真正帮助。当我 运行 它在 python 中时,该脚本完美运行,所以我知道问题出在 win32com 上。使用 makepy.py 来包含类型库也没有帮助,但也许我的 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)]
}
}
)
在此先感谢您的帮助!
知道了!只需要包含相关的 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
并在 py2exe:
中添加 skip_archive=True
它起作用了!
希望它也能在不同的计算机上运行...
我用的向导在[py2exe](http://www.py2exe.org/index.cgi/IncludingTypelibs)的网站上!
我试图用 py2exe 将我的程序编译成 exe。不幸的是,当我使用 win32com 从 Excel 复制图表并使用 (Shapes.PasteSpecial(ppPasteOLEObject)
将它们嵌入到 PowerPoint 中时,我经常收到此错误:
File "win32com\client\__init__.pyc", line 170, in __getattr__
AttributeError: ppPasteOLEObject`.
谷歌搜索并没有真正帮助。当我 运行 它在 python 中时,该脚本完美运行,所以我知道问题出在 win32com 上。使用 makepy.py 来包含类型库也没有帮助,但也许我的 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)]
}
}
)
在此先感谢您的帮助!
知道了!只需要包含相关的 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
并在 py2exe:
中添加 skip_archive=True
它起作用了!
希望它也能在不同的计算机上运行...
我用的向导在[py2exe](http://www.py2exe.org/index.cgi/IncludingTypelibs)的网站上!