这个问题出现在我用py2exe打包了一个包含tkinter的图形化界面,在当前电脑上运行无问题,在移动到新电脑上后提示报错、
这里吐槽一下,新电脑上报错信息一闪而过,我用的土法子解决的,就是录视频然后0.25倍速度暂定找到报错:
看了下csdn的攻略,有的说是把打包后的lib该个文件名,或者重新复制lib,我这边测试没有用:
https://blog.csdn.net/qq_37864626/article/details/131888423
实际研究后发现,其实py2exe已经把打包需要的lib放在dist文件夹下了,但是打包后的程序运行后却没有去lib下找,而是去找系统自带的环境变量里找,所以找不到。。。
最终在外网找到了解决方案:
https://stackoverflow.com/questions/12598279/how-to-correct-tcl-library-and-tk-library-with-py2exe
可以直接cd到对应文件夹下改系统变量:
set TCL_LIBRARY=.\tcl\tcl8.5\
set TK_LIBRARY=.\tcl\tk8.5\
问题原因是
https://github.com/py2exe/py2exe/blob/b6dfefd6879061d7ea99385cad252f955708fa9b/py2exe/hooks.py#L296
这部分,打包时候设置的环境变量
getcwd用于获取当前工作目录绝对路径,在设置环境的变量的时候它用的是绝对路径-所以也导致了在当前电脑上能用而移动后不能用
解决方法是在你的程序里重新设置下环境变量,而且是用相对路径的形式
import os
os.environ['TCL_LIBRARY'] = "lib/tcl"
os.environ['TK_LIBRARY'] = "lib/tk"
然后确保执行主程序的同文件夹下有lib这个文件夹即可,这个lib是py2exe打包后自己形成的。