qq_35013743 2024-08-07 10:21 采纳率: 0%
浏览 29
已结题

yolo5 打包exe 运行报错

YOLO5 开发了一个小应用,在Pycharm运行环境下,可以正常运行。使用Pyintaller打包成EXE后,运行报错:

Traceback (most recent call last):
  File "PyInstaller\hooks\rthooks\pyi_rth_win32comgenpy.py", line 46, in <module>
  File "PyInstaller\hooks\rthooks\pyi_rth_win32comgenpy.py", line 25, in _pyi_rthook
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "win32com\__init__.py", line 6, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "pythoncom.py", line 3, in <module>
  File "pywintypes.py", line 61, in __import_pywin32_system_module__
ImportError: Module 'pythoncom' isn't in frozen sys.path ['C:\\Users\\zhouzhiwei\\AppData\\Local\\Temp\\_MEI130882\\base_library.zip', 'C:\\Users\\zhouzhiwei\\AppData\\Local\\Temp\\_MEI130882\\lib-dynload', 'C:\\Users\\zhouzhiwei\\AppData\\Local\\Temp\\_MEI130882', 'C:\\Users\\zhouzhiwei\\AppData\\Local\\Temp\\_MEI130882\\win32', 'C:\\Users\\zhouzhiwei\\AppData\\Local\\Temp\\_MEI130882\\pythonwin', 'C:\\Users\\zhouzhiwei\\AppData\\Local\\Temp\\_MEI130882\\pywin32_system32']
[12208] Failed to execute script 'pyi_rth_win32comgenpy' due to unhandled exception!

确认了安装环境:

  1. win10
  2. python 版本 : 3.8.19 | packaged by conda-forge | (default, Mar 20 2024, 12:38:07) [MSC v.1929 64 bit (AMD64)] on win32
  3. Pyinstaller : 4.4版
  4. pywin32:225
  5. pypiwin32: 223

尝试了网上的各种方式,包括复制 pythoncom38.dll 到EXE根目录,也尝试 过pywin32:227、223,Pyinstaller : 5.0 ,还是一直报错。想请教下各位 有没有遇到过类似的问题。或者有没有python3.8打包EXE运行成功的,方不方便导出生成 All_Package.txt,我直接全部重装试试。

  • 写回答

20条回答 默认 最新

  • 专家-司宇[在线] 2024-08-07 10:22
    关注

    参考免费微信小程序:皆我百晓生 作答,经由专家-司宇整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    遇到您描述的问题,通常是因为PyInstaller在打包时未能正确地包含或处理pythoncom模块相关的依赖。这可能与PyInstaller的配置、环境差异或特定库的兼容性有关。下面是一些解决步骤,希望能帮助到您:

    1. 更新环境至最新稳定版本

    虽然您已经尝试了不同版本的pywin32PyInstaller,但确保所有相关库都是最新的稳定版本总是个好主意。重新检查并更新它们:

    • 确保pywin32为最新稳定版,可以通过命令pip install -U pywin32来实现。
    • 如果您尝试过PyInstaller 5.0但问题依旧,建议再次确认是否有更新版本发布,并尝试升级。

    2. 使用--hidden-import

    在使用PyInstaller打包时,显式声明可能未被自动检测到的隐藏导入可能会解决问题。尝试在打包命令中添加--hidden-import参数:

    pyinstaller --onefile --hidden-import=pythoncom --hidden-import=pywintypes your_script.py
    

    3. 添加数据文件

    如果上述方法不奏效,可能是某些DLL文件没有被正确打包或引用。您可以尝试手动将pythoncom38.dllpywintypes38.dll从您的Python安装目录(通常是...\Python\Python38\Lib\site-packages\pywin32_system32)复制到PyInstaller生成的dist目录下,或者通过PyInstaller的--add-data选项来指定这些文件:

    pyinstaller --onefile --add-data "<path_to_dll>\pythoncom38.dll;." --add-data "<path_to_dll>\pywintypes38.dll;." your_script.py
    

    4. 使用Hook文件

    PyInstaller允许自定义hook来处理特定库的打包问题。如果上述方法都无效,您可以尝试为pythoncompywintypes编写自定义hook文件。创建一个名为hook-pythoncom.py的文件,内容可能如下(注意这只是一个示例,实际内容可能根据具体情况调整):

    from PyInstaller.utils.hooks import collect_dynamic_libs
    
    # Hook for pythoncom
    binaries = collect_dynamic_libs('pythoncom')
    binaries += collect_dynamic_libs('pywintypes')
    
    # 返回收集到的二进制文件列表
    hiddenimports = ['win32com', 'win32api']
    datas = binaries
    

    然后在运行PyInstaller时使用--additional-hooks-dir指向该hook文件所在的目录:

    pyinstaller --onefile --additional-hooks-dir=<path_to_hook_dir> your_script.py
    

    5. 查看日志

    如果上述方法都不能解决问题,查看PyInstaller生成的日志文件(默认是warn-your_script.txtyour_script.spec)可能会提供更具体的错误信息,从而指引您找到问题所在。

    总结

    每一步尝试后,请重新构建并测试您的EXE文件。如果问题依然存在,考虑检查您的应用程序代码中是否有对win32compythoncom的隐式依赖,并确保所有必要的库都被正确地导入和处理。希望这些建议能帮助您解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月8日
  • 创建了问题 8月7日

悬赏问题

  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数