转为.exe后pyscreenshot不截图

After converting to .exe, pyscreenshot doesn't take screenshots

我一直在 Python 中制作屏幕到文本程序,我想将其转换为 .exe 文件。这是因为脚本需要在不同的系统上 运行 而没有安装 Python。

我的代码如下:

import numpy as np
import cv2
from PIL import Image
import pytesseract
import requests
import pyscreenshot

def main():
    currentWattage = 0
    while(True):
        imgGrab = pyscreenshot.grab(bbox=wattageBox)
        img = np.array(imgGrab)
        strRead = pytesseract.image_to_string(img, config="--psm 6")
        try:
            wattage = int(strRead)
            if(wattage != currentWattage):
                print("Wattage geupdate, lampen reageren")
                currentWattage = wattage
        except ValueError:
            print("Could not convert " + strRead)
        print(currentWattage)


if __name__ == "__main__":
    print("Start")
    pytesseract.tesseract_cmd = r'Tesseract-OCR\tesseract.exe'
    wattageBox = (150, 400, 240, 430)
    main()

如果我通过 VS Code 运行 它,它工作正常。我得到我想要的结果。但是当我用 cx_Freeze 将它转换为 .exe 文件时,它会出于某种原因不断重新启动并填满我的内存。

我认为它与 pyscreenshot 有关,但也许你们中的一些人有在 .exe 中使用 pyscreenshot 的经验?

pyscreenshot 使用多重处理,需要调用 multiprocessing.freeze_support() 函数来冻结使用多重处理生成 Windows 可执行文件的程序,请参阅 multiprocessing documentation.

尝试将以下导入添加到您的代码中:

from multiprocessing import Process, freeze_support

并将其主要部分修改如下:

if __name__ == "__main__":
    freeze_support()
    print("Start")
    pytesseract.tesseract_cmd = r'Tesseract-OCR\tesseract.exe'
    wattageBox = (150, 400, 240, 430)
    Process(target=main).start()

此解决方案的灵感来自 exe generated by py2exe and pyinstaller not working