1

所以我对如何让 pyinstaller 构建使用 win32com 的应用程序感到困惑。我有一个脚本可以从 IDLE 或通过与 excel 交互的命令行毫无问题地运行

xl = Dispatch('Excel.Application')

然后是其他一些非常基本的 excel 调用,然后关闭。我已经看到将“clsctx=pythoncom.CLSCTX_LOCAL_SERVER”作为 Dispatch 的参数包含在内的建议,但它不会改变任何东西。每当我构建脚本时,都会收到类似于此的错误

Traceback (most recent call last):
File "<string>", line 7, in <module>
File "C:\Python27\trunk\iu.py", line 436, in importHook
mod = _self_doimport(nm, ctx, fqname)
File "C:\Python27\trunk\iu.py", line 521, in doimport
exec co in mod.__dict__
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client", line 11,
in <module>
File "C:\Python27\trunk\iu.py", line 436, in importHook
mod = _self_doimport(nm, ctx, fqname)
File "C:\Python27\trunk\iu.py", line 521, in doimport
exec co in mod.__dict__
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache",
line 662, in <module>
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache",
line 58, in __init__
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache",
line 649, in Rebuild
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache",
line 65, in _SaveDicts
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache",
line 141, in GetGeneratePath
IOError: [Errno 22] invalid mode ('w') or filename: 'C:\\Python27\\trunk\\Myskri
pt\\dist\\Myskript.exe?844863\\__init__.py'

这是从这个德国问题http://www.python-forum.de/viewtopic.php?f=1&t=25010复制的,但我的错误基本相同。我试图实施该页面上给出的建议也无济于事。

我对 COM 的东西几乎一无所知,只是希望能运行这个小的 excel 应用程序。

编辑:还尝试导入pythoncom并运行“CoInitialize()”(基于这个家伙在用py2exe编译后从Python调用MS Access模块​​函数失败说他的脚本在pyinstaller上运行良好)但这也没有改变任何东西。在这里真的很茫然,感谢任何建议。

4

1 回答 1

0

我不确定您是否仍在使用 py2exe,当我偶然发现此线程时,我正要尝试您的解决方法: Call MS Access module function from Python after compiling with py2exe failed

“解决方案”是使用 Pyinstaller,默认情况下根据您的脚本实现了一堆变通方法。我用我的 pywin32 脚本尝试了它,它使用了 excel 和 word com 对象,它完美地工作,没有任何调整。

于 2013-06-23T18:06:09.410 回答