Пайтон скрипт неправильно работает после компиляции с помощью pyinstaller

from pynput import keyboard
import pyautogui
import sys
import time
from typing import Optional
from ctypes import wintypes, windll, create_unicode_buffer


def getForegroundWindowTitle() -> Optional[str]:
    hWnd = windll.user32.GetForegroundWindow()
    length = windll.user32.GetWindowTextLengthW(hWnd)
    buf = create_unicode_buffer(length + 1)
    windll.user32.GetWindowTextW(hWnd, buf, length + 1)

    if buf.value:
        return buf.value
    else:
        return None


def w():
    print('w')
    x, y = pyautogui.position()
    if getForegroundWindowTitle() == 'game name':
        try:
            pyautogui.click(1050, 1010 , button='right')
            time.sleep(0.05)
            pyautogui.moveTo(x, y)
        except:
            pass
    else:
        print('окно с игрой неактивно!')


def t():
    print('t')
    x, y = pyautogui.position()
    if getForegroundWindowTitle() == 'game name':
        try:
            pyautogui.click(1240, 1010, button='right')
            time.sleep(0.05)
            pyautogui.moveTo(x, y)
        except:
            pass
    else:
        print('окно с игрой неактивно!')

def on_key_release(key):
    try:
        if key.char == "w":
            w()
        elif key.char == "t":
            t()
        elif key.char == "p":
            print('p')
            listener.stop()
            sys.exit()
        else:
            print('ошибка')
    except:
        print('!')


with keyboard.Listener(on_release = on_key_release) as listener:
    listener.join()

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

Функция скрипта - определять нажатие клавиш и на "релизе" заданных совершать манипуляции курсором, после запуска exe в консоль выводится "ошибка" при нажатии любой клавиши с буквой(блок try работает как и должен), при этом скрипт все ещё правильно определяет название окна игры и нажатую клавишу(проверено). В чем может быть проблема?


Ответы (2 шт):

Автор решения: Алексей Ватов

Проверь, что PyInstaller включает все необходимые библиотеки. Можешь указать какие-то неявные из них в параметре --hidden-import при сборке приложения.

https://pyinstaller.org/en/stable/when-things-go-wrong.html

→ Ссылка
Автор решения: Fox Fox
from pynput import keyboard
import pyautogui
import sys
import time
from typing import Optional
from ctypes import wintypes, windll, create_unicode_buffer

Возможно, в этих импортах проблема. Если в интерактивном режиме работает, значит, имеет доступ ко всему, что нужно для работы. То есть, если даже чего забыли импортировать, среда "поможет". Pyinstaller не умеет читать мысли. Он собирает в кучу только то, на что есть ссылки в коде. Что-то не импортируется как должно. Ну и лично я вообще не понял из этого описания проблемы суть проблемы. Что не работает? Что пишет или не пишет программа в консоль в качестве ошибки? Что за версия pyautogui? Вот это: "определять нажатие клавиш и на "релизе" заданных совершать манипуляции курсором" - набор слов!

→ Ссылка