Вопрос или проблема
Я использовал слушатель клавиатуры из библиотеки 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
. Ниже представлены рекомендации и решения, которые могут помочь в устранении этой проблемы.
Шаги по устранению проблемы
-
Установите библиотеку pynput:
Убедитесь, что библиотекаpynput
установлена в вашем окружении Python. Вы можете сделать это, выполнив следующую команду в терминале:pip install pynput
-
Использование ключа –hidden-import:
Вы уже упоминали, что использовали флаг--hidden-import
в авто-обработчике PyInstaller. Убедитесь, что вы добавили его правильно. Команда может выглядеть следующим образом:pyinstaller --hidden-import=pynput.keyboard main.py
Также проверьте, не нужно ли добавлять дополнительные скрытые импорты в зависимости от вашего проекта. Для
pynput
могут потребоваться:pyinstaller --hidden-import=pynput.mouse --hidden-import=pynput.keyboard main.py
-
Создание файла спецификаций:
Иногда больше контроля дает использование файла спецификации. Вы можете создать файл спецификации командой: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
-
Проверка виртуальной среды:
Если вы используете виртуальную среду (например,venv
илиconda
), убедитесь, что PyInstaller установлен именно в этой среде и что вы активировали ее перед выполнением команд:# Для venv source venv/bin/activate # на Linux или MacOS venv\Scripts\activate # на Windows # Для conda conda activate myenv
-
Логи и отладка:
Если ошибки продолжаются, выполните сборку PyInstaller с флагом--debug
, чтобы получить больше информации о том, что именно идет не так:pyinstaller --debug=all main.py
Это может помочь вам найти дополнительные ошибки, связанные с загрузкой модулей.
Заключение
Проблема ModuleNotFoundError: No module named 'pynput'
в PyInstaller может быть решена различными способами, включая правильную установку модулей, использование скрытых импортов и создание конфигурационных файлов. Проверьте указанные шаги и убедитесь, что все сделано корректно. Если после выполнения всех рекомендаций ошибка не устраняется, стоит обратиться на форумы поддержки или в репозиторий GitHub проекта PyInstaller, где вы сможете получить более специфичную помощь от сообщества.