ModuleNotFoundError: Нет модуля с именем ‘pynput’ после использования PyInstaller

Вопрос или проблема

Я использовал слушатель клавиатуры из библиотеки pynput.keyboard, и когда я импортирую его в свой проект, он работает. Когда я запускаю его через PyInstaller, он выдает мне ошибку, такую как:

Traceback (most recent call last):
 File "main.py", line 1, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "hack\__init__.py", line 3, in <module>
    from pynput import keyboard
ModuleNotFoundError: No module named 'pynput'
[16912] Не удалось выполнить скрипт 'main' из-за необработанного исключения

Я использовал тег –hidden-imports в своей программе auto-py-to-exe. Это все равно не работает. Вот код, в котором я использую pynput

hack/init.py

import json
import os
from pynput import keyboard
import pyautogui
import pytesseract
import _thread
from .window import *
from time import sleep
from openai import OpenAI
import pyscreenshot

Используя слушатель клавиатуры

starting=False
    def on_press(key):
        global starting
        if key == keyboard.Key.esc:
            starting=False
    
    listener = keyboard.Listener(on_press=on_press)
    listener.start()

Способ, которым я знаю, в чем ошибка: я запустил его из консоли, чтобы увидеть, какие ошибки возникли. Это одна из ошибок, которые появились.

Ответ или решение

Ошибка ModuleNotFoundError: No module named 'pynput' после использования PyInstaller часто возникает из-за того, что PyInstaller не может правильно обнаружить или упаковать необходимые модули, такие как pynput. Ниже представлены рекомендации и решения, которые могут помочь в устранении этой проблемы.

Шаги по устранению проблемы

  1. Установите библиотеку pynput:
    Убедитесь, что библиотека pynput установлена в вашем окружении Python. Вы можете сделать это, выполнив следующую команду в терминале:

    pip install pynput
  2. Использование ключа –hidden-import:
    Вы уже упоминали, что использовали флаг --hidden-import в авто-обработчике PyInstaller. Убедитесь, что вы добавили его правильно. Команда может выглядеть следующим образом:

    pyinstaller --hidden-import=pynput.keyboard main.py

    Также проверьте, не нужно ли добавлять дополнительные скрытые импорты в зависимости от вашего проекта. Для pynput могут потребоваться:

    pyinstaller --hidden-import=pynput.mouse --hidden-import=pynput.keyboard main.py
  3. Создание файла спецификаций:
    Иногда больше контроля дает использование файла спецификации. Вы можете создать файл спецификации командой:

    pyinstaller --name=MyApp --onefile --windowed main.py

    Это создаст файл MyApp.spec. Откройте этот файл и добавьте необходимые скрытые импорты в секцию Analysis:

    a = Analysis(['main.py'],
                pathex=[],
                binaries=[],
                datas=[],
                hiddenimports=['pynput.keyboard', 'pynput.mouse'],
                ...

    После этого создайте исполняемый файл, выполнив:

    pyinstaller MyApp.spec
  4. Проверка виртуальной среды:
    Если вы используете виртуальную среду (например, venv или conda), убедитесь, что PyInstaller установлен именно в этой среде и что вы активировали ее перед выполнением команд:

    # Для venv
    source venv/bin/activate  # на Linux или MacOS
    venv\Scripts\activate     # на Windows
    
    # Для conda
    conda activate myenv
  5. Логи и отладка:
    Если ошибки продолжаются, выполните сборку PyInstaller с флагом --debug, чтобы получить больше информации о том, что именно идет не так:

    pyinstaller --debug=all main.py

    Это может помочь вам найти дополнительные ошибки, связанные с загрузкой модулей.

Заключение

Проблема ModuleNotFoundError: No module named 'pynput' в PyInstaller может быть решена различными способами, включая правильную установку модулей, использование скрытых импортов и создание конфигурационных файлов. Проверьте указанные шаги и убедитесь, что все сделано корректно. Если после выполнения всех рекомендаций ошибка не устраняется, стоит обратиться на форумы поддержки или в репозиторий GitHub проекта PyInstaller, где вы сможете получить более специфичную помощь от сообщества.

Оцените материал
Добавить комментарий

Капча загружается...