问题截图如下:
(1)version conflict for package 'Tcl":have 8.6.12,need exactly 8.6.13
(2)_tkinter.TclError:invalid command name "tcl_findLibrary
快速解决的偏方:
1.在电脑上搜索tcl8.6和tk8.6两个文件夹(应该选择位于同一个编程环境中的一对)
2.在E盘创建名为library的文件夹(第一个报错图片上写的其他文件位置应该也可以,此处偷懒)
3.打开tcl8.6文件夹,把其中所有内容复制到E:\library文件夹中
4.把tk8.6文件夹整体复制到E:\library文件夹中
——OK,再打开exe文件应该就正常了。
被这看似简单的打包问题困住了一整天,翻阅了各种网站的资料。
试过修改各个init.tcl与tk.tcl文件内的8.6.12\13的版本号,
也试过下载最新的8.6.13的tcl\tk文件(电脑上有许多虚拟环境,不知道怎么装),
还试过增减电脑的TCL_LIBRARY等等的系统变量
——可惜都不行。
直到在外网上看到相关问题,才慢慢尝试出来了。
本人是一头愚蠢的大学牲,没有能力进一步研究这两个问题内部的精巧机理,只能提供这一个看起来不靠谱的偏方。
请各路大神给予更详细的教学指导。
———————————————————————————————————————————
第二次补充:
后来在一个虚拟环境中,再次使用pyinstaller打包新的文件时,又出现了与第一个问题相似的问题,还是版本号8.6.12与8.6.13的问题。
猜想,运行打包好的exe需要8.6.13,执行pyinstaller打包程序则需要8.6.12。(晕,感觉有点矛盾)
观察报错信息发现,这tcl/tk的调用似乎跨越了不同的编程环境,包括本地python环境和其他的虚拟python环境。
经过实验试出了一个较好的方法——直接在使用pyinstaller打包的当前虚拟环境中,找到tcl8.6和tk8.6两个文件夹,分别修改其init.tcl和tk.tcl文件中的版本号,都改为8.6.13。(或是报错信息指定需要的版本号)。
如下图:
就是那种修改版本号的方法。
这样,打包和打开exe应该都正常了。