pyinstall打包paddle程序运行出现多个.exe,更改源码的解决方案

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

重新打包,在运行程序只有一个进程问题解决。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容