Python夜间PDF工具转EXE时提示找不到tkdnd包,求解决方案
解决Pyinstaller打包tkinterdnd2时找不到tkdnd的问题
核心原因
tkinterdnd2依赖底层的tkdnd动态库和TCL脚本,Pyinstaller默认不会自动收集这些文件,导致打包后运行时找不到依赖。
具体解决步骤
定位tkdnd的安装目录
找到Python环境中tkinterdnd2的安装路径,通常在Lib/site-packages/tkinterdnd2下,里面有一个tkdnd子目录,包含所需的动态库(如.dll)和TCL脚本文件。修改Pyinstaller打包命令
在原命令基础上,添加--add-data参数将tkdnd目录包含进去。Windows系统下使用分号分隔路径,完整命令如下:Pyinstaller -F -w -p Lib/site-packages --add-data "bin;bin" --add-data "Lib/site-packages/tkinterdnd2/tkdnd;tkinterdnd2/tkdnd" PDF_Night_reading.py(如果是Linux/macOS,将分号替换为冒号)
在代码中适配打包后的路径
在导入tkinterdnd2之前,添加代码指定tkdnd的搜索路径,确保打包后程序能找到依赖:import sys import os if getattr(sys, 'frozen', False): # 打包后的临时运行目录 base_path = sys._MEIPASS # 将tkdnd的TCL脚本路径加入环境变量 os.environ['TCL_LIBRARY'] = os.path.join(base_path, 'tkinterdnd2', 'tkdnd', 'tcl') # 确保tkinterdnd2的路径在sys.path中 sys.path.append(os.path.join(base_path, 'tkinterdnd2')) # 之后再导入tkinterdnd2 from tkinterdnd2 import TkinterDnD, DND_FILES(可选)使用spec文件更灵活配置
如果命令行参数太复杂,可以先生成spec文件:Pyinstaller -F -w -p Lib/site-packages --add-data "bin;bin" PDF_Night_reading.py --specpath .编辑生成的
PDF_Night_reading.spec文件,在datas列表中添加tkdnd的路径:datas = [('bin', 'bin'), ('Lib/site-packages/tkinterdnd2/tkdnd', 'tkinterdnd2/tkdnd')],最后用spec文件打包:
Pyinstaller PDF_Night_reading.spec
内容的提问来源于stack exchange,提问作者NaturalSelection
相关产品推荐
相关产品推荐

