pyinstall打包paddle程序运行出现多个.exe,更改源码的解决方案
pyinstall打包paddle程序运行出现多个.exe解决方案,添加
multiprocessing.freeze_support() //不起作用。
问题:使用pyinstall 打包paddleocr程序,运行打包后的.exe任务管理器里面出现多个.exe,导致程序卡死。
分析原因:
python程序打包后,运行出现多个.exe多半都是因为多进程或者线程池引起的。所以排查源码中的多进程或者线程池。一般多进程也是用于图像数据处理部分,所以定位大概就是源码中的数据处理部分。
找到自己的虚拟环境中paddle的位置,我的环境路径为:D:\software\Anaconda3\envs\paddle2.0\Lib\site-packages\paddle
重复开启子进程的位置在D:\software\Anaconda3\envs\paddle2.0\Lib\site-packages\paddle\dataset\image.py中,39行代码 有个import subprocess,导致在调用from paddleocr import PaddleOCR,进程就会不停的开启。如下所示:
if six.PY3:
import subprocess
import sys
import_cv2_proc = subprocess.Popen(
[sys.executable, "-c", "import cv2"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err = import_cv2_proc.communicate()
retcode = import_cv2_proc.poll()
if retcode != 0:
cv2 = None
else:
import cv2
else:
try:
import cv2
except ImportError:
cv2 = None
解决方法:屏蔽原有的代码,添加最后4行代码。更改代码如下所示:
# if six.PY3:
# import subprocess
# import sys
# import_cv2_proc = subprocess.Popen(
# [sys.executable, "-c", "import cv2"],
# stdout=subprocess.PIPE,
# stderr=subprocess.PIPE)
# out, err = import_cv2_proc.communicate()
# retcode = import_cv2_proc.poll()
# if retcode != 0:
# cv2 = None
# else:
# import cv2
# else:
# try:
# import cv2
# except ImportError:
# cv2 = None
try:
import cv2
except ImportError:
cv2 = None
重新打包,在运行程序只有一个进程问题解决。