Python 3.x 使用cx\U冻结生成exe时发生重新修补错误
我正在Windows7上使用Python 3.4。我的安装文件如下所示:Python 3.x 使用cx\U冻结生成exe时发生重新修补错误,python-3.x,exe,cx-freeze,win32com,Python 3.x,Exe,Cx Freeze,Win32com,我正在Windows7上使用Python 3.4。我的安装文件如下所示: from cx_Freeze import setup, Executable, sys exe=Executable( script="XYZ.py", base="Win32Gui", ) includefiles=[] includes=[] excludes=[] packages=[] setup( version = "1.0", description = "XYZ", author = "
from cx_Freeze import setup, Executable, sys
exe=Executable(
script="XYZ.py",
base="Win32Gui",
)
includefiles=[]
includes=[]
excludes=[]
packages=[]
setup(
version = "1.0",
description = "XYZ",
author = "MAX",
name = "AT",
options = {'build_exe': {'excludes':excludes,'packages':packages,'include_files':includefiles}},
executables = [exe]
)
from distutils.core import setup
import py2exe, sys, os, difflib
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
console = [{'script': "XYZ.py"}],
zipfile = None,
)
运行获取的exe时,会弹出一个错误,提示:
...
File "C:\Python34\Lib\site-packages\win32com\client\CLSIDToClass.py", line 46, in GetClass
return mapCLSIDToClass[clsid]
KeyError: '{00020970-0000-0000-C000-000000000046}'
我就是搞不懂这里的问题。请帮忙
谢谢。您使用的是在磁盘上生成的静态代理,其中包含已编译的可执行文件故障查找。如果您不知道静态代理是什么,您可能正在使用自动生成静态代理的
win32com.client.gencache.EnsureDispatch
解决此问题的最简单方法是使用win32com.client.dynamic.Dispatch
使用动态代理。静态代理有一些好处,但很可能您不需要它
您可以在此处找到有关COM对象的静态和动态代理的更多信息:我刚刚发现,
EnsureDispatch
的问题在gencache
模块中,当使用cx\u freeze
构建可执行文件时,它假定处于只读模式
以下行允许在Windows 7 x64中的AppData\Local\Temp\gen\u py\\.\
目录中构建缓存:
from win32com.client import gencache
if gencache.is_readonly:
gencache.is_readonly = False
gencache.Rebuild() #create gen_py folder if needed
参考资料:
- 答复
另外,静态分派的性能要好得多您是否对
win32com.client
代码使用静态代理?@Fenikso我不明白…什么是静态代理。。。。?我只是从word文档中读取一些内容,为此,我在脚本XYZ.py中使用import win32com.client…如果您不知道它是什么,您可能正在使用EnsureDispatch
。它自动生成静态代理。它有一些好处,但可能会打破cx_的僵局。尝试改用Dispatch
。请参阅。尝试调度也…引发错误…“模块”对象没有属性“调度”…我也使用了py2exe…但同样的错误再次出现…thnksDid您是否尝试win32com.client.Dispatch
或win32com.client.dynamic.Dispatch
?我希望静态代理也会在“冻结”的应用程序中生成。难道不可能吗?