You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller编译时ttkwidgets模块找不到的问题求助

解决PyInstaller无法识别ttkwidgets模块的问题

问题根源分析

你的钩子文件存在两处关键错误:

  1. collect_submodules('ttkwidgets')返回的是列表对象,直接放入hiddenimports会导致列表嵌套,PyInstaller无法正确解析
  2. collect_data_files(ttkwidgets)中的参数应该是字符串'ttkwidgets',而非未引用的模块名

修正后的解决方案

方案1:使用专用模块钩子文件

创建名为hook-ttkwidgets.py的钩子文件(而非hook-main.py),内容如下:

from PyInstaller.utils.hooks import collect_submodules, collect_data_files

hiddenimports = collect_submodules('ttkwidgets')
datas = collect_data_files('ttkwidgets')

然后执行编译命令:

pyinstaller --noconsole -F main.py

PyInstaller会自动识别针对ttkwidgets的钩子文件,无需额外指定--additional-hooks-dir。

方案2:使用--collect-all参数(PyInstaller 4.0+)

直接在编译命令中添加--collect-all ttkwidgets,强制收集该模块的所有依赖和资源:

pyinstaller --collect-all ttkwidgets --noconsole -F main.py

这个参数会自动处理模块的子模块、数据文件等,无需手动编写钩子。

方案3:修正原有钩子文件(不推荐)

如果坚持使用hook-main.py,需修正错误:

from PyInstaller.utils.hooks import collect_submodules, collect_data_files

hiddenimports = [
    "tkinter",
    "urllib"
] + collect_submodules('ttkwidgets')  # 将子模块列表展开合并

datas = collect_data_files('ttkwidgets')  # 参数改为字符串

然后执行原命令:

pyinstaller --hidden-import=ttkwidgets --noconsole -F --additional-hooks-dir=. main.py

额外检查项

  • 确保ttkwidgets已正确安装在当前Python环境(执行pip show ttkwidgets确认路径)
  • 若使用虚拟环境,需激活后再执行PyInstaller编译

内容的提问来源于stack exchange,提问作者RVB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:38:13