• Pyinstaller 打包exe后,打开出现can‘t find package tkdnd 报错


    这几天在用python做一个软件,过程中用到tkdnd这个模块

    tkdnd 是一个用于 Tkinter 的拖放 (drag-and-drop) 扩展库,提供了在 Tkinter 应用程序中实现拖放功能的支持。Tkinter 是 Python 的标准 GUI 库,而 tkdnd 提供了额外的功能,使得开发者可以在 Tkinter 应用程序中实现更高级的拖放操作。

    做好以后在pycharm中运行是正常的,运行以下打包命令后,打开就会出现报错

    打包命令:

    pyinstaller --onefile --windowed ccc.py

    报错代码

    1. Traceback (most recent call last):
    2. File "tkinterdnd2\TkinterDnD.py", line 53, in _require
    3. _tkinter.TclError: can't find package tkdnd
    4. During handling of the above exception, another exception occurred:
    5. Traceback (most recent call last):
    6. File "ccc.py", line 148, in <module>
    7. File "tkinterdnd2\TkinterDnD.py", line 285, in __init__
    8. File "tkinterdnd2\TkinterDnD.py", line 55, in _require
    9. RuntimeError: Unable to load tkdnd library.

    原因分析

    这个打包后出现该报错原因就是没有将这个tkinterdnd2库打包进exe文件中

    解决过程

    起初尝试了很多种方法,都没有成功将该库打包进去

    后来查了网上很多资料也没有比较详细的解决办法,最终还是求助了chatgpt

    PyInstaller 命令

    我们将使用以下命令来打包你的 Python 脚本 ccc.py,同时包含 tkinterdnd2tkdnd 库。

    地址就是库的安装地址

    pyinstaller -F ccc.py --paths D:\python39\lib\site-packages --add-data "D:\python39\lib\site-packages\tkinterdnd2;tkinterdnd2" --add-data "D:\python39\lib\site-packages\tkdnd;tkdnd" --hidden-import=tkinterdnd2 --hidden-import=tkdnd --clean

    参数说明

    • -F:将所有依赖打包成一个单独的可执行文件。
    • ccc.py:你的 Python 脚本。
    • --paths D:\python39\lib\site-packages:指定 Python 库路径。
    • --add-data "D:\python39\lib\site-packages\tkinterdnd2;tkinterdnd2":将 tkinterdnd2 库添加到打包文件中。注意路径格式为 "源路径;目标路径",在 Windows 上使用分号 ; 分隔。
    • --add-data "D:\python39\lib\site-packages\tkdnd;tkdnd":将 tkdnd 库添加到打包文件中。
    • --hidden-import=tkinterdnd2:显式指定 tkinterdnd2 作为隐藏导入。
    • --hidden-import=tkdnd:显式指定 tkdnd 作为隐藏导入。
    • --clean:清除 PyInstaller 使用的临时文件和缓存。

    执行命令

    在命令行或终端中运行上述命令:

    复制代码 

    pyinstaller -F ccc.py --paths D:\python39\lib\site-packages --add-data "D:\python39\lib\site-packages\tkinterdnd2;tkinterdnd2" --add-data "D:\python39\lib\site-packages\tkdnd;tkdnd" --hidden-import=tkinterdnd2 --hidden-import=tkdnd --clean

    调试信息

    如果在打包过程中遇到问题,可以将输出重定向到一个日志文件中,以便详细检查:

    pyinstaller -F ccc.py --paths D:\python39\lib\site-packages --add-data "D:\python39\lib\site-packages\tkinterdnd2;tkinterdnd2" --add-data "D:\python39\lib\site-packages\tkdnd;tkdnd" --hidden-import=tkinterdnd2 --hidden-import=tkdnd --clean > build_log.txt 2>&1

    这样所有输出(包括错误信息)都会保存到 build_log.txt 文件中,你可以查看该文件以获取详细的调试信息。

  • 相关阅读:
    openjdk和oracle jdk的区别
    GLPI资产管理系统安装Fusioninventory插件发现Windows和Linux主机
    Review of English Academic Writing (HITSZ)
    Maven3.5.4下载和配置详细图文教程
    设计模式之代理模式
    Flink1.15源码解析--安全模块及安全上下文
    测试管理 | 龙智获得Xray专家认证
    微信热搜查询易语言代码
    安装oem 13c
    沪深A股上市公司创新投资数据(2007-2018年)
  • 原文地址:https://blog.csdn.net/qq_43079386/article/details/139725149