pyscreenshot, поскольку ImageGrab не работает после компиляции с PyInstaller в exe

Когда я обычно использую код перед компиляцией, он работает отлично, но при компиляции в .exe с помощью cxfreeze или pyinstaller и запуске программного обеспечения зависает

      import pyscreenshot as ImageGrab
import threading

def wprint():
    print("Wprint")
    global tempimg
    imagem = ImageGrab.grab()
    tempimg = imagem
    print("End Wprint")


x = threading.Thread(target=wprint)
x.start()

1 ответ

Если мы включим ведение журнала, мы увидим, что модуль работает, порождая процесс для запуска PIL в

      DEBUG:pyscreenshot.loader:running "pil" in child process
DEBUG:easyprocess:command: ['C:\\Users\\user\\.virtualenvs\\random\\Scripts\\python.exe', '-m', 'pyscreenshot.cli.grab', '--filename', 'C:\\Users\\user\\AppData\\Local\\Temp\\pyscreenshotbza0zwqm\\screenshot.png', '--backend', 'pil', '--debug']
DEBUG:easyprocess:process was started (pid=29996)
Wprint
DEBUG:easyprocess:process has ended, return code=0
DEBUG:easyprocess:stdout=
DEBUG:easyprocess:stderr=
DEBUG:PIL.PngImagePlugin:STREAM b'IHDR' 16 13
DEBUG:PIL.PngImagePlugin:STREAM b'IDAT' 41 65536
End Wprint

Когда вы упаковываете свое приложение, оно попытается запустить новый процесс против сгенерированного вами exe-файла в качестве интерпретатора (первый аргумент выше), но ваш скрипт ничего не обрабатывает из аргументов, поэтому он просто запускается снова, что порождает другой процесса, и это будет повторяться до тех пор, пока ваши ресурсы не будут исчерпаны или пока вы не завершите его.

На домашней странице pypi пакета pyscreenshot упоминается, что он в основном устарел, поскольку PIL (подушка) теперь правильно обрабатывает то, что он пытался решить изначально, и кажется, что это не было необходимо на вашей платформе. Таким образом, вы также можете попробовать ImageGrab подушки напрямую, который должен иметь нормальный API Python.

Модуль pyscreenshot в большинстве случаев устарел. Он был создан потому, что модуль PIL ImageGrab работал только в Windows, но теперь также поддерживаются Linux и macOS. В pyscreenshot есть некоторые функции, которые могут быть полезны в особых случаях: гибкие бэкенды, поддержка Wayland, иногда более высокая производительность, необязательная подобработка.

Другие вопросы по тегам