PyInstaller打包含sv-ttk主题的Python脚本后exe执行报错求助
解决PyInstaller打包sv-ttk时找不到sv.tcl文件的问题
问题原因
sv_ttk依赖的sv.tcl等资源文件未被PyInstaller自动收集,导致程序运行时在临时目录中找不到这些文件。
解决方法
方法1:修改打包命令,添加sv_ttk资源目录
找到Python环境中sv_ttk的安装目录(通常在site-packages/sv_ttk下,虚拟环境则在venv/Lib/site-packages/sv_ttk),在打包命令中新增--add-data参数指定该目录:
pyinstaller.exe --onefile --windowed --icon=dice.ico --add-data "dice.ico;." --add-data "实际路径/sv_ttk;sv_ttk" -n number_generator --hidden-import=sv_ttk gui.py
替换实际路径为你的sv_ttk所在目录,比如C:\Python311\Lib\site-packages或venv/Lib/site-packages。
方法2:在代码中适配PyInstaller临时路径
在gui.py开头添加以下代码,让程序在打包后能正确找到sv_ttk的资源:
import os import sys import tkinter import sv_ttk # 处理PyInstaller打包后的临时路径 if hasattr(sys, '_MEIPASS'): sv_ttk_resource_path = os.path.join(sys._MEIPASS, 'sv_ttk') # 将资源目录添加到Tcl的搜索路径 tkinter.Tcl().eval(f'lappend auto_path "{sv_ttk_resource_path}"')
之后再用方法1中的打包命令执行打包即可。
方法3:通过.spec文件手动配置资源
- 先生成.spec文件:
pyinstaller.exe --onefile --windowed --icon=dice.ico --add-data "dice.ico;." -n number_generator --hidden-import=sv_ttk gui.py --specpath .
- 打开生成的
number_generator.spec,在datas列表中添加sv_ttk资源:
datas = [ ('dice.ico', '.'), ('实际路径/sv_ttk', 'sv_ttk'), ]
- 用.spec文件重新打包:
pyinstaller.exe number_generator.spec
内容的提问来源于stack exchange,提问作者bd_2021
相关产品推荐
相关产品推荐

