Super_Progranmer 2026-03-08 13:22 采纳率: 0%
浏览 2

(标签-pyqt|关键词-collect)

使用pyinstaller打包pyqt5程序时出现报错,不知道怎么回事

17580 WARNING: QtLibraryInfo(PyQt5): could not find translations with base name 'qt'! These translations will not be collected.
17586 WARNING: QtLibraryInfo(PyQt5): could not find translations with base name 'qtbase'! These translations will not be collected.

  • 写回答

1条回答 默认 最新

  • 檀越@新空间 2026-03-08 13:23
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你遇到的警告信息是使用 PyInstaller 打包 PyQt5 程序时常见的问题,具体如下:

    17580 WARNING: QtLibraryInfo(PyQt5): could not find translations with base name 'qt'! These translations will not be collected.
    17586 WARNING: QtLibraryInfo(PyQt5): could not find translations with base name 'qtbase'! These translations will not be collected.
    

    这个警告并不影响程序的正常运行,但它提示 PyInstaller 在打包过程中未能找到 PyQt5 的翻译文件(translations)。这通常是因为 PyInstaller 默认不会自动收集这些文件,而某些 PyQt5 模块依赖它们。


    一、原因分析

    • PyQt5 使用了 Qt 的翻译机制(Qt Translation System),例如多语言支持。
    • PyInstaller 默认不会收集这些翻译文件,导致打包后的程序缺少这些资源。
    • 虽然程序可以运行,但可能在某些系统中出现界面不完整或无法显示中文等问题。

    二、解决方案

    1. 显式指定包含 Qt 的翻译文件

    你可以通过 --add-data 参数告诉 PyInstaller 包含哪些翻译文件。

    步骤如下:
    1. 确定 PyQt5 的翻译文件路径

      • 通常位于 PyQt5 安装目录下的 Qt5\translations 文件夹中。
      • 例如:C:\Python39\Lib\site-packages\PyQt5\Qt5\translations
    2. 使用 --add-data 添加这些文件

      pyinstaller --name=myapp --onefile --add-data "path_to_pyqt5_translations;PyQt5/Qt5/translations" your_script.py
      
      • 替换 path_to_pyqt5_translations 为实际路径。
      • 如果是 Linux 或 macOS,路径用冒号 : 分隔,如:
        --add-data "/usr/lib/python3.9/site-packages/PyQt5/Qt5/translations:/usr/lib/python3.9/site-packages/PyQt5/Qt5/translations"
        

    2. 使用自定义 hook 文件(推荐)

    如果你经常打包 PyQt5 程序,可以创建一个自定义的 .hook 文件来自动包含这些翻译文件。

    1. 创建一个名为 hook-PyQt5.py 的文件,内容如下:

      from PyInstaller.utils.hooks import collect_submodules, collect_data_files
      
      # 收集所有 PyQt5 的子模块
      hiddenimports = collect_submodules('PyQt5')
      
      # 收集 PyQt5 的翻译文件
      datas = collect_data_files('PyQt5', include_py=False)
      
    2. 将该文件放在与你的主脚本同一目录下,或者放在 PyInstaller 的 hooks 目录中。

    3. 打包时使用:

      pyinstaller --name=myapp --onefile --hooks-dir=your_hooks_dir your_script.py
      

    3. 修改 .spec 文件(适用于高级用户)

    如果你已经生成了 .spec 文件,可以直接修改它来添加数据。

    打开 .spec 文件,找到 a = Analysis(...) 部分,添加以下内容:

    a.datas += [('PyQt5/Qt5/translations/qt_en.qm', 'PyQt5/Qt5/translations/qt_en.qm'),
               ('PyQt5/Qt5/translations/qtbase_en.qm', 'PyQt5/Qt5/translations/qtbase_en.qm')]
    

    注意:你需要根据实际的翻译文件名进行修改。


    三、注意事项

    • 翻译文件名可能因语言不同而变化,比如 qt_en.qm 是英文,qt_zh_CN.qm 是简体中文。
    • 如果你不需要多语言支持,可以忽略这个警告。
    • 如果你仍然看到错误,可以尝试升级 PyQt5 和 PyInstaller 到最新版本。

    四、总结

    | 解决方案 | 说明 | |---------|------| | 显式添加翻译文件 | 使用 --add-data 参数将 PyQt5 的翻译文件包含进打包中 | | 自定义 hook 文件 | 自动收集所需文件,适合频繁打包的场景 | | 修改 .spec 文件 | 适用于已有 .spec 文件的高级用户 |


    五、示例命令(Windows)

    pyinstaller --name=myapp --onefile --add-data "C:\Python39\Lib\site-packages\PyQt5\Qt5\translations;PyQt5/Qt5/translations" your_script.py
    

    如果你能提供具体的代码或打包命令,我可以进一步帮助你定制解决方案。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月8日