labelImg的运行环境配置与pyinstaller打包过程
1.更新pip
2.解决pyrcc5报错,安装pyrcc5
3.安装 lxml
pip install lxml
4.编译资源文件resources.qrc
5.复制resources.py文件到libs
6.运行labelImg.py
7.pyinstaller打包 labelImg.py生成exe
8.编译后的labelImg.exe不加载data中的配置文件
运行没有事,编译后不加载data中的配置文件。
用“显示控制台”命令打包,运行时报错 “Not find:/data/predefined_classes.txt (optional)”
打印参数发现路径的前缀不对,不是exe所在目录:args.class_file:C:\Users\HT007\AppData\Local\Temp\_MEI244802\data\predefined_classes.txt
原因:python3下,打包成exe后,data目录路径不能再用__file__来定位,而应该用sys.executable定位。
解决思路:调试模式下sys.executable得到python.exe文件路径,打包成exe后sys.executable得到labelImg.exe文件路径。利用二者区别,对打包成exe的情况,根据labelImg.exe重新定位data所在目录。修改abelImg.py文件的代码如下:
# argparser.add_argument("class_file",
# default=os.path.join(os.path.dirname(__file__), "data", "predefined_classes.txt"),
# nargs="?")
base_dir = os.path.dirname(__file__)
if sys.executable.find("labelImg.exe") > 0:
base_dir = os.path.dirname(os.path.realpath(sys.executable))
argparser.add_argument("class_file",
default=os.path.join(base_dir, "data", "predefined_classes.txt"),
nargs="?")
9. 处理输出json格式时的中文乱码情况
参考:https://blog.csdn.net/qq_26502245/article/details/122072396
# Path(self.output_file).write_text(json.dumps(output_dict), ENCODE_METHOD)
Path(self.output_file).write_text(json.dumps(output_dict, ensure_ascii=False), ENCODE_METHOD)