ImportError: невозможно импортировать имя 'InputDevice' - Evdev
Я установил evdev на мой Raspberry Pi 3 B+ с sudo -H pip install evdev
, Установка прошла нормально и я побежал python /usr/local/lib/python2.7/dist-packages/evdev/evtest.py
чтобы увидеть, работает ли это. Все было отлично.
Проблема заключается в том, что при выполнении этого кода Python:
from evdev import InputDevice, categorize, ecodes
gamepad = InputDevice('/dev/input/js0')
print(gamepad)
for event in gamepad.read_loop():
print(categorize(event)
Я получаю эту ошибку в качестве ответа:
Traceback (most recent call last):
File "evdev1.py", line 1, in <module>
from evdev import InputDevice, categorize, ecodes
File "/home/pi/Desktop/evdev.py", line 2, in <module>
from evdev import InputDevice, categorize, ecodes
ImportError: cannot import name 'InputDevice'
Но когда я выполню from evdev import InputDevice, categorize, ecodes
на оболочке Python, похоже, работает. Что я делаю неправильно? Как я могу решить это?
К счастью, Дэви.
0 ответов
Это написано в вашей трассировке ошибок: у вас есть файл с именем evdev1.py
и файл evdev.py
в вашем рабочем каталоге. Anfrom evdev import ...
в evdev1.py
попытается импортировать из файла "/home/pi/Desktop/evdev.py"
- который тоже является модулем.
Вот почему звоню from evdev import ...
из другого рабочего каталога работает.
Это немного сбивает с толку, но в linux есть старые и новые методы доступа к геймпадам / джойстикам. Более старый joydev показывает устройства как "js*", а новый evdev показывает их как "event*"
Если вы используете evdev, вам нужно использовать путь к событию, начинающийся с "/ dev / input / event", вместо пути, начинающегося с "/ dev / input / js".
Идентифицируйте устройство так:
import evdev
devices = [evdev.InputDevice(path) for path in evdev.list_devices()]
for device in devices:
print(device.path, device.name)
Или, если есть только один, просто используйте первый, который появится.
import evdev
gamepad = evdev.InputDevice( evdev.list_devices()[0] )