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

PyInstaller打包exe后运行报错:找不到tkdnd包求解决方案

PyInstaller打包含tkinterDnD程序的tkdnd缺失问题解决

有效解决步骤

1. 手动打包tkdnd的TCL库并指定运行路径

找到你系统中tkdnd的TCL库目录(通常在Python安装目录的tcl文件夹下,比如tkdnd2.9.2),执行打包命令时用--add-data参数将该目录打包进程序:

python -m PyInstaller -F --add-data "你的tkdnd目录路径;tkdnd2.9.2" release_script.py

替换你的tkdnd目录路径为实际路径,比如C:\Python310\tcl\tkdnd2.9.2。

然后在你的release_script.py开头添加以下代码,让打包后的程序能找到tkdnd库:

import os
import sys
import tkinter as tk

if getattr(sys, 'frozen', False):
    # 打包后的运行环境
    tkdnd_dir = os.path.join(sys._MEIPASS, 'tkdnd2.9.2')
    tk.tk.call('lappend', 'auto_path', tkdnd_dir)

2. 统一依赖包的导入方式

确保代码中使用tkinterdnd2包的正确导入语句,替换旧的tkinterDnD导入:

# 替换原来的 import tkinterDnD
from tkinterdnd2 import TkinterDnD, DnDWrapper

3. 修正自定义钩子文件

如果使用钩子文件,确保hook-tkinterdnd2.py内容如下,放在待打包脚本同目录:

from PyInstaller.utils.hooks import collect_data_files

datas = collect_data_files('tkinterdnd2')

然后执行打包命令:

python -m PyInstaller -F release_script.py --additional-hooks-dir=.

问题原因

出现_tkinter.TclError: can't find package tkdnd是因为PyInstaller无法自动识别并打包tkdnd的TCL扩展库,导致程序运行时找不到对应的TCL包,必须手动指定打包该库并设置运行时路径。


问题背景

我开发了一款需分发给无Python环境用户的程序,使用PyInstaller将其打包为.exe文件,安装过程正常,但运行.exe时出现以下错误:

\VS Code Projects\Release Program\dist\release_script>release_script
Traceback (most recent call last):
  File "release_script.py", line 8, in <module>
  File "tkinterDnD\tk.py", line 36, in __init__
  File "tkinterDnD\tk.py", line 28, in _init_tkdnd
_tkinter.TclError: can't find package tkdnd
[18012] Failed to execute script 'release_script' due to unhandled exception!

已尝试以下方法但无效:

  • 执行pip install tkinterdnd2
  • 将tkdnd文件夹复制到项目的tcl文件夹中
  • 将tkdnd文件夹复制到Python的tcl文件夹中
  • 下载hook-tkinterdnd2.py并放在待打包.py文件旁,执行命令:python -m PyInstaller -F release_script.py --additional-hooks-dir=.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:27:52