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

PyInstaller打包含ttkwidgets的Python脚本成exe后模块缺失报错

打包含ttkwidgets的Python脚本为exe时提示找不到模块

问题详情

  • 脚本依赖ttkwidgets.autocomplete.AutocompleteEntry,代码如下:
import tkinter as tk
import work_logger_database
from ttkwidgets.autocomplete import AutocompleteEntry

root = tk.Tk()
root.geometry('600x300')

items = work_logger_database.show_all()
stored_projects_list = list(set([items[i][2] for i in range(len(items))]))

project_entry = AutocompleteEntry(root, completevalues=stored_projects_list)
project_entry.grid(column=0, row=1, sticky='W')

root.mainloop()
  • 打包成exe后运行报错:Failed to execute script due to unhandled exception: No module named ttkwidgets
  • 打包过程中收到警告:WARNING: Several hooks defined for module 'numpy'. Please take care they do not conflict.
  • 已尝试的打包命令:
    pyinstaller work_logger.py --onefile -w --hidden-import=ttkwidgets --hidden-import=ttkwidgets.autocomplete
    
    pyinstaller work_logger.py --onefile -w --hidden-import=ttkwidgets
    

解决方案

方法1:用--collect-all强制收集完整模块

--hidden-import有时无法打包ttkwidgets的全部依赖文件,改用--collect-all参数可以强制收集该模块的所有文件:

pyinstaller work_logger.py --onefile -w --collect-all ttkwidgets

方法2:手动添加hook文件(方法1无效时尝试)

  1. 找到ttkwidgets的安装路径(比如虚拟环境下的Lib\site-packages\ttkwidgets)
  2. 创建hook-ttkwidgets.py文件,内容如下:
from PyInstaller.utils.hooks import collect_all

datas, binaries, hiddenimports = collect_all('ttkwidgets')
  1. 打包时指定hook文件所在目录:
pyinstaller work_logger.py --onefile -w --additional-hooks-dir=./hooks

(把hook文件放在当前目录的hooks文件夹下,或者替换成实际路径)

关于numpy的警告

该警告与ttkwidgets模块缺失问题无关,是numpy存在多个hook定义导致的。一般不影响exe运行,若介意可尝试更新PyInstaller到最新版本,或检查numpy版本兼容性。

内容的提问来源于stack exchange,提问作者Hjalti Geir Ágústsson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:15:36