PyInstaller编译时ttkwidgets模块找不到的问题求助
解决PyInstaller无法识别ttkwidgets模块的问题
问题根源分析
你的钩子文件存在两处关键错误:
collect_submodules('ttkwidgets')返回的是列表对象,直接放入hiddenimports会导致列表嵌套,PyInstaller无法正确解析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
相关产品推荐
相关产品推荐

