我制作了一些python脚本来控制外部CATIA应用程序。我现在必须将这些脚本打包成可执行文件,但我无法做到。
如何在构建脚本后强制win32com对特定模块使用早期绑定?
我的脚本使用 win32com.client 模块控制CATIA应用程序。我使用后期绑定处理CATIA,但模块 CATIA V5 SpaceAnalysisInterfaces对象库包含带有引用输入/输出参数的函数。对于这个我使用早期绑定,遗憾的是没有使用 MakePy 的简单使用,我必须修改 win32com.gen_py 包中生成的源以获得正确的行为来自输入/输出参数。现在它在我执行python脚本时工作正常。但是,如果我使用 py2exe 或 cx_freeze 构建它们,则可执行文件仅使用后期绑定,因此我会得到错误的结果。
这是我挂钩CATIA应用程序并使用其API的方式:
import win32com.client
buff = [0, 0, 0]
catApp = win32com.client.GetActiveObject("CATIA.Application") # Late bind needed
doc = catApp .Documents.Open(path)
part = doc.Part # This property fails if using early binding
spa = doc.GetWorkbench(u"SPAWorkbench")
I = spa.Inertias.Add(part) # Early bind needed
cogCoords = I.GetCOGPosition(buff) # The damn input/ouput argument function
这是我的构建脚本使用 cx_freeze :
from cx_Freeze import setup, Executable
options = {
"includes": [],
"excludes": [],
"packages": ["win32com.gen_py"]
}
target = Executable(
script = "test.py",
base = "Console",
compress = True,
icon = None,
)
setup(
name = "Test",
version = "1.0",
description = "Early Binding Test Built",
author = "C.LECLERC",
options = {"build_exe": options},
executables = [target]
)
此构建脚本会生成一堆文件,包括我的实际 win32com.gen_py 模块的内容,因此它应该可以正常工作。但是当我执行文件时它只使用后期绑定。当我使用 py2exe 时,我无法检查文件是否正确添加但行为完全相同:后期绑定!
我看了this post,但我的问题不同了。模块被正确复制,脚本不会引发异常。输入/输出功能无法正常工作。
任何帮助都将不胜感激。
答案 0 :(得分:1)
我回答我自己的问题,分享我找到的解决方案并将问题标记为已解决。
只需将'dicts.dat'文件从 win32com.gen_py 包中复制到'library.zip'的等效文件夹中由cx_freeze生成的存档。