macOS下PyInstaller打包tkinterdnd2项目找不到tkdnd包报错如何解决?
解决方案
步骤1:定位tkinterdnd2的安装路径
执行命令查看模块安装位置:pip show tkinterdnd2
返回结果中找到Location字段对应的路径,进入该路径下的tkinterdnd2文件夹,确认其中存在tkdnd资源目录。
步骤2:修改主程序代码,强制指定运行时tkdnd路径
在main.py的最开头、导入tkinterdnd2相关代码之前,添加如下代码:
import sys import os # 判断是否为打包后的运行环境 if getattr(sys, 'frozen', False): base_path = sys._MEIPASS # 强制指定tkdnd库的路径 os.environ['TKDND_LIBRARY'] = os.path.join(base_path, 'tkdnd')
步骤3:调整打包参数
你之前的--add-data参数无效是因为路径指向错误,需要指定实际的tkdnd资源路径,两种方式可选:
方式A:直接使用命令行打包
把<替换为你第一步找到的tkinterdnd2目录的绝对路径>/tkdnd替换成实际路径后执行:
python -m PyInstaller --clean -y -n "output_name" \ --add-data="<替换为你第一步找到的tkinterdnd2目录的绝对路径>/tkdnd:tkdnd" \ --add-data="*.png:." \ --add-data="*.tcl:." \ --add-data="theme:theme" \ --add-data="*.xlsx:." \ --add-data="*.csv:." \ main.py
方式B:使用spec文件配置(更稳定)
- 先执行一次基础打包命令生成
main.spec文件:python -m PyInstaller main.py - 打开
main.spec文件,找到datas配置项,修改为:
datas=[ ("<替换为第一步找到的tkinterdnd2目录的绝对路径>/tkdnd", "tkdnd"), ("*.png", "."), ("*.tcl", "."), ("theme", "theme"), ("*.xlsx", "."), ("*.csv", ".") ],
- 用spec文件执行打包:
python -m PyInstaller main.spec
其他说明
针对macOS环境可以尝试调整py2app的资源配置规则作为替代打包方案,通用跨平台场景下PyInstaller配置正确后是最稳定的选择。
内容的提问来源于stack exchange,提问作者Timo
相关产品推荐
相关产品推荐

