Пюсб на windows - бэкэнд недоступен

Я пытаюсь подключить интерфейс приложения Python к устройству NFC через USB. Лучшим вариантом кажется pyusb, но я не могу заставить его подключиться к бэкэнду libusb. Я продолжаю получать

ValueError: бэкэнд недоступен

Я просмотрел трассировку стека и обнаружил, что usb/backend/libusb10.py (который является частью pyusb) пытается загрузить libusb-1.0.dll для использования в качестве бэкэнда, но не может его найти. Дело не в том, что это не на моем пути, его вообще нет на моем компьютере!

Я установил libusb-win32 (http://libusb.org/wiki/libusb-win32) , но полученный каталог, кажется, включает только libusb0.dll. Где libusb-1.0.dll ???!

Я хотел бы знать, где взять эту dll, или даже другое предложение, чтобы pyusb работал в Windows 7.


person user634340    schedule 08.12.2012    source источник


Ответы (11)


Загрузите и установите libusb-win32-devel-filter- 1.2.6.0.exe. Он должен работать.

person beebek    schedule 10.07.2015
comment
Спасибо за это. Поработал над моим Crazyflie и избавил меня от необходимости откатываться на 32-битный conda. - person Mike Wise; 05.07.2016
comment
моя проблема решилась для casio 3200, для проекта pyusb - person Giorgi Gvimradze; 20.06.2018

У меня была аналогичная проблема недавно при попытке поговорить с разрабатываемым мной USB-устройством. Я рыскал по сети в поисках libusb-1.0.dll, и мне не повезло. Я нашел исходный код, но ничего не построено и не готово к установке. В итоге я установил двоичные файлы libusb-win32, то есть libusb0.dll.

PyUSB будет искать бэкэнды libusb-1.0, libusb0 и openUSB.

libusb0.dll уже был в моей системе, но что-то все еще не было настроено правильно, PyUSB не работал.

Я следовал инструкциям, которые здесь, чтобы загрузить и установить драйвер с помощью инструментов графического интерфейса, предоставленных для установите драйвер фильтра и мастер INF. Обратите внимание, это не сработало, пока я не запустил мастер INF.

Я новичок в программировании, и мне довольно неприятно отсутствие четкой документации / примеров, чтобы связать все это вместе.

person Dave L.    schedule 26.12.2012
comment
Да, запустите inf-wizard и выберите свое устройство для запуска. - person jonincanada; 01.11.2015
comment
@jonincanada, похоже, я столкнулся с той же проблемой, что и Гарретт Хайд. но разница в том, что я загрузил и разархивировал файл (libusb1.0.20), затем скопировал файл dll, в частности (libusb-1.0.dll), и скопировал его в систему 32; затем я скопировал libusb-1.lib в python34 / Lib. и по-прежнему возникает ошибка «нет серверной части», можете ли вы помочь мне решить проблему? - person Socre; 04.11.2016
comment
У Adafruit есть хорошее руководство по тому, как заставить pyusb работать в Windows: learn. adafruit.com/circuitpython-on-any-computer-with-ft232h/ - person jjz; 18.02.2020

Я использую Python 2.6.5, libusb-win32-device.bin-0.1.12.1 и pyusb-1.0.0-a0 в системе Windows XP и продолжаю получать ValueError: No backend available.

Поскольку в Интернете не было реальной помощи по этой проблеме, я потратил много времени на то, чтобы обнаружить, что ctypes util.py использует переменную Path для поиска файла библиотеки. В моем path не было windows\system32 и PYUSB не нашла библиотеку. Я обновил переменную path и теперь USB работает.

person George G    schedule 30.04.2013
comment
Учитывая, что речь идет о XP (и OP спрашивал Re: Windows 7), это могло быть лучше в качестве комментария. - person Thomas Ingham; 01.05.2013
comment
Я добавил текущую папку в PATH. - person Liviu; 16.09.2014
comment
Это уловка! Необходимо поместить libusb-1.0.dll в каталог system32. Убедитесь, что он подходит для вашей системы (32 или 64 бит) - person driedler; 25.09.2014

Есть более простое решение.

Загрузите и распакуйте в C: \ PATH libusb-1.0.20 из ссылка для скачивания

Затем попробуйте эту строку:

backend = usb.backend.libusb1.get_backend (find_library = lambda x: C: \ PATH \ libusb-1.0.20 \ MS32 \ dll \ libusb-1.0.dll)

dev = usb.core.find (backend = backend, find_all = True)

В зависимости от вашей системы попробуйте версию DLL MS64 или MS32.

Обновление от 17.01.2020, после просьбы поделиться дополнительным кодом:

import usb.core
import usb.util

from infi.devicemanager import DeviceManager
dm = DeviceManager()
devices = dm.all_devices
for i in devices:
    try:
        print ('{} : address: {}, bus: {}, location: {}'.format(i.friendly_name, i.address, i.bus_number, i.location))
    except Exception:
        pass


import usb.backend.libusb1

backend = usb.backend.libusb1.get_backend(find_library=lambda x: "C:\\libusb-1.0.20\\MS32\\dll\\libusb-1.0.dll")
dev = usb.core.find(backend=backend, find_all=True)

def EnumerateUSB():    #I use a simple function that scans all known USB connections and saves their info in the file
    with open("EnumerateUSBLog.txt", "w") as wf:
        counter = 0
        for d in dev:
            try:
                wf.write("USB Device number " + str(counter) + ":" + "\n")
                wf.write(d._get_full_descriptor_str() + "\n")
                wf.write(d.get_active_configuration() + "\n")
                wf.write("\n")
                counter += 1
            except NotImplementedError:
                wf.write("Device number " + str(counter) + "is busy." + "\n")
                wf.write("\n")
                counter += 1
            except usb.core.USBError:
                wf.write("Device number " + str(counter) + " is either disconnected or not found." + "\n")
                wf.write("\n")
                counter += 1
        wf.close()
person Sergey Lourie    schedule 03.10.2019

У меня была такая же проблема с Windows 10, как с Python 2.7.16, так и с Python 3.7.2. Я установил libusb (через python -m pip install libusb), но сообщение об ошибке осталось. Кроме того, приведенный выше совет по установке libusb-win32 у меня не сработал; ни одна из двух ссылок (исходный пост и ответ @beebek) не существовала.

Однако что действительно сработало, так это комментарий @ user1495323: Я скопировал libusb-1.0.dll из C:\Users\username\AppData\Roaming\Python\Python27\site-packages\libusb\_platform\_windows\x64\ в C:\Windows\System32\

person user9393931    schedule 15.03.2019

  1. загрузить последнюю версию libusb Загрузить libusb

Скопируйте MS32 \ dll \ libusb-1.0.dll в C: \ Windows \ SysWOW64

Скопируйте MS64 \ dll \ libusb-1.0.dll в C: \ Windows \ System32

3.

pip install libusb

Скопируйте MS32 \ dll \ libusb-1.0.dll в C: \ Python \ Python37-32 \ Lib \ site-packages \ libusb_platform_windows \ x86

Скопируйте MS64 \ dll \ libusb-1.0.dll в C: \ Python \ Python37-32 \ Lib \ site-packages \ libusb_platform_windows \ x64

У меня этот метод работает.

person Jacky Yan    schedule 26.06.2020
comment
Я пошел по твоим стопам. Но это не решило проблему. Пожалуйста, дайте мне знать, если мы сможем начать демонстрацию экрана в удобное для вас время и взглянуть на это. Я в IST. - person Ashwin Kumar; 21.06.2021

«Существует две версии libusb API: текущий libusb-1.0 API и его прежний предшественник libusb-0.1». (http://www.libusb.org/) "libusb-win32 - это порт USB-библиотеки libusb-0.1 для операционные системы Microsoft Windows ». «Загрузите архив последней версии» с той же страницы (1.0.9 - текущая версия), чтобы получить libusb-1.0 эквивалент, вы найду папку Win32, в которой ты найдешь свой libusb-1.0.dll, чтобы поиграть! Вы даже можете его построить: http://www.libusb.org/wiki/windows_backend.

РЕДАКТИРОВАТЬ. Его необходимо создать (загрузите с / http://sourceforge.net/projects/libusb/files/libusb-1.0/), поскольку tarball относится к 2012 году, а самые свежие источники - от 15 июня 2014 года.

person Liviu    schedule 16.09.2014

Чтобы подключиться к устройству NFC через USB с помощью PYUSB, вам необходимо установить бэкэнд для этого устройства. Я не думаю, что есть какой-либо бэкэнд для любого устройства, кроме устройства libusb.

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

person tbenisa    schedule 06.08.2014

На всякий случай:

Я не пробовал это в Windows, но мне пришлось установить путь DYLD_LIBRARY_PATH, чтобы обойти эту ошибку на Macintosh.

экспорт DYLD_LIBRARY_PATH = / opt / local / lib

Обсуждение того, следует ли устанавливать эту переменную: здесь.

person fixxxer    schedule 15.03.2015

Бэкэнд libusb инициализируется сценарием python в пути / usb путем загрузки двоичной DLL из Windows PATH, если она пропущена или установлена ​​фиктивной DLL zadig, она будет жаловаться на это, потому что DLL, установленная zadig, не экспортирует любой символ за пределами мира (фиктивный, я думаю)

person copslock    schedule 02.01.2021

2021 г., и проблема все еще возникает в Windows (Windows 10). Я решил это, установив pyusb и libusb и добавив путь libusb в среду Windows:

  1. pip install pyusb
  2. pip install libusb
  3. libusb-1.0.dll будет автоматически добавлен в:

\venv\Lib\site-packages\libusb\_platform\_windows\x64
и
\venv\Lib\site-packages\libusb\_platform\_windows\x32

  1. Теперь просто добавьте эти пути (полный путь) в Windows Path и перезапустите CMD / PyCharm.
person Alaa M.    schedule 21.06.2021
comment
Установили эти пакеты и включили пути в переменную Path Env на моей машине Win-10. Однако выполнение этой строки кода по-прежнему вызывает импорт usb без Backenderror для dev в usb.core.find (find_all = True): print (Devices - + dev) - person Ashwin Kumar; 21.06.2021
comment
@AshwinKumar - Вы уверены, что установили правильные библиотеки? Есть pylibusb, который вам не следует устанавливать. Кроме того, не забудьте перезапустить PyCharm / CMD после обновления пути к Windows (иначе это не сработает). Может, попробуй начать с чистого венва - person Alaa M.; 21.06.2021
comment
Я установил упомянутый вами пакет. Вот скриншот, показывающий то же самое - file.io/EYaucUUluN9e Загрузите снимок экрана с моим кодом здесь file.io/MyORGzN3zJF0 Пожалуйста, дайте мне знать, если я что-то упускаю. Вы должны извинить любую основную ошибку - я не активный разработчик :-) - person Ashwin Kumar; 21.06.2021
comment
забыл упомянуть, перезагрузил мой компьютер. Проблема все еще сохраняется. Пожалуйста, дайте мне знать, что мне не хватает. - person Ashwin Kumar; 21.06.2021
comment
@AshwinKumar - я не могу открыть ссылки, либо загружаю на Imgur, либо пытаюсь отладить его, установив точку останова в libloader.py (расположенном в /venv/Lib/site-packages/usb) в строке 92 for candidate in candidates, продолжайте вторую итерацию до candidate == libusb-1.0, перейдите к find_library(), и продолжайте, пока directory не станет тем путем, который вы добавили в Path, затем посмотрите, что возвращает os.path.isfile(fname) - person Alaa M.; 21.06.2021
comment
Можем ли мы провести быстрый сеанс демонстрации экрана? Я могу отправить вам приглашение в команды или Gotomeeting - person Ashwin Kumar; 22.06.2021