Python pyinstaller和win32com

Python pyinstaller和win32com,python,win32com,pyinstaller,Python,Win32com,Pyinstaller,所以我对如何让pyinstaller构建一个使用win32com的应用程序感到困惑。我有一个脚本,它可以在空闲状态下运行,也可以通过与excel交互的命令行运行 xl = Dispatch('Excel.Application') 然后是其他一些真正基本的excel调用,然后关闭。我看到过将“clsctx=pythoncom.clsctx\u LOCAL\u SERVER”作为Dispatch参数的建议,但它并没有改变任何事情。每当我构建脚本时,我都会遇到类似的错误 Traceback (mo

所以我对如何让pyinstaller构建一个使用win32com的应用程序感到困惑。我有一个脚本,它可以在空闲状态下运行,也可以通过与excel交互的命令行运行

xl = Dispatch('Excel.Application')
然后是其他一些真正基本的excel调用,然后关闭。我看到过将“clsctx=pythoncom.clsctx\u LOCAL\u 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'
回溯(最近一次呼叫最后一次):
文件“”,第7行,在
文件“C:\Python27\trunk\iu.py”,第436行,在importHook中
mod=\u self\u doimport(nm、ctx、fqname)
doimport中第521行的文件“C:\Python27\trunk\iu.py”
执行公司在国防部__
文件“Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client”,第11行,
在里面
文件“C:\Python27\trunk\iu.py”,第436行,在importHook中
mod=\u self\u doimport(nm、ctx、fqname)
doimport中第521行的文件“C:\Python27\trunk\iu.py”
执行公司在国防部__
文件“Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache”,
第662行,输入
文件“Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache”,
第58行,in_uuuinit__
文件“Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache”,
第649行,在重建中
文件“Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache”,
第65行,in_SaveDicts
文件“Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache”,
第141行,在GetGeneratePath中
IOError:[Errno 22]无效模式('w')或文件名:'C:\\Python27\\trunk\\Myskri
pt\\dist\\Myskript.exe?844863\\\\ uuu init\uuuu.py'
这是从这个德国问题复制过来的,但我的错误基本上是一样的。我试图执行那一页上给出的建议,但也无济于事

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


编辑:还尝试导入pythoncom并运行“CoInitialize()”(根据这个家伙说他的脚本在pyinstaller中运行良好),但这也没有改变任何事情。我真的很茫然,非常感谢您的建议。

我不确定您是否仍在使用py2exe,我正要尝试您的解决方案时,无意中遇到了以下问题:


“解决方案”是使用Pyinstaller,根据脚本的不同,默认情况下,Pyinstaller实现了一系列变通方法。我用使用excel和word com对象的pywin32脚本进行了尝试,它在没有任何调整的情况下工作得非常完美

好的,如果有人需要,我可以通过从Python/Lib/site packages/win32com/中删除'gens'文件夹,然后在调度调用之前这样做:
win32com.client.gencache.is_readonly=False
win32com.client.gencache.GetGeneratePath()
pythoncom.CoInitialize()
xl=Dispatch('Excel.Application',clsctx=pythoncom.clsctx\u LOCAL\u SERVER)