使用py2exe打包含tkinter的Python3脚本遇'tcldir'属性错误求助
解决py2exe打包带tkinter的Python3脚本时的AttributeError问题
我之前也踩过这个一模一样的坑!这是py2exe在处理Python 3版本tkinter时的典型兼容性bug,根源是它无法自动定位到tcl/tk的安装目录,才会抛出AttributeError: 'module' object has no attribute 'tcldir'这个异常。下面是几个亲测有效的解决办法:
方法1:手动在setup.py中指定tcl/tk路径
这是最稳妥的方案,不需要修改第三方库文件,直接在你的打包脚本里添加路径配置:
import sys import os from distutils.core import setup import py2exe # 获取Python安装目录下的tcl/tk路径(根据你的Python版本调整tcl8.6/tk8.6) PYTHON_INSTALL_PATH = sys.exec_prefix TCL_LIBRARY = os.path.join(PYTHON_INSTALL_PATH, 'tcl', 'tcl8.6') TK_LIBRARY = os.path.join(PYTHON_INSTALL_PATH, 'tcl', 'tk8.6') setup( # 根据你的程序类型选windows(无控制台)或console(带控制台) windows=['你的脚本文件名.py'], options={ 'py2exe': { 'bundle_files': 1, # 如果需要单文件打包可保留,不需要则删除 'include_files': [ (TCL_LIBRARY, 'tcl'), (TK_LIBRARY, 'tk'), ], } }, )
运行修改后的setup.py,py2exe会自动把tcl和tk的库文件打包到输出目录,就能解决路径找不到的问题。
方法2:更换适配Python3.4的py2exe版本
你使用的Python3.4版本比较老,默认安装的py2exe可能对tkinter支持不完善。可以尝试安装专门适配Python3.3-3.4的版本:
pip install py2exe==0.9.2.2
这个版本对老Python版本的tkinter兼容性更好。
方法3:换用更可靠的打包工具
如果上面的方法都没解决,建议直接换成PyInstaller或者cx_Freeze——这两个工具对tkinter的支持比老版本py2exe稳定得多。比如用PyInstaller打包,只需要一行命令:
pyinstaller --onefile 你的脚本文件名.py
几乎不需要额外配置就能成功打包带tkinter的程序。
内容的提问来源于stack exchange,提问作者Melvin Abraham
相关产品推荐
相关产品推荐

