Pyusb on windows - no backend available

后端 未结 9 1102
情话喂你
情话喂你 2020-11-29 04:55

I\'m trying to have my python application interface with an NFC device via USB. The best option seems to be pyusb, but I can\'t get it to connect to the libusb backend. I ke

相关标签:
9条回答
  • 2020-11-29 04:57

    I am using Python 2.6.5, libusb-win32-device.bin-0.1.12.1 and pyusb-1.0.0-a0 on a windows XP system and kept receiving ValueError: No backend available.

    Since there wasn't any real help on the web for this problem I spent a lot of time finding that ctypes util.py uses the Path variable to find the library file. My path did not include windows\system32 and PYUSB didn't find the library. I updated the path variable and now the USB is working.

    0 讨论(0)
  • 2020-11-29 05:03
    1. download the latest libusb Download libusb

    Copy MS32\dll\libusb-1.0.dll to C:\Windows\SysWOW64

    Copy MS64\dll\libusb-1.0.dll to C:\Windows\System32

    3.

    pip install libusb
    

    Copy MS32\dll\libusb-1.0.dll to C:\Python\Python37-32\Lib\site-packages\libusb_platform_windows\x86

    Copy MS64\dll\libusb-1.0.dll to C:\Python\Python37-32\Lib\site-packages\libusb_platform_windows\x64

    This method works for me.

    0 讨论(0)
  • 2020-11-29 05:04

    To connect to your NFC device via USB using PYUSB, you will need to install the backend for that device. I do not think there is any backend for any device other than a libusb device.

    To build a backend. You will need to know the driver (.sys file) for your device, so you could write a wrapper DLL to expose functionalities in the device. Your DLL would have to have a method to find device based on PID & VID, another method to open device and another method to send data and so on...

    0 讨论(0)
  • 2020-11-29 05:05

    Download and install libusb-win32-devel-filter-1.2.6.0.exe. It should work.

    0 讨论(0)
  • 2020-11-29 05:07

    There's a simpler solution.

    Download and unpack to C:\PATH the libusb-1.0.20 from download link

    Then try this line:

    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)

    Depending on your system, try either MS64 or MS32 version of the .dll

    Update of 17/01/2020, after a request to share more code:

    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()
    
    0 讨论(0)
  • 2020-11-29 05:09

    I had the same problem with Windows 10, both Python 2.7.16 and Python 3.7.2. I installed libusb (through python -m pip install libusb ) but the error message remained. Also, the advice above about installing libusb-win32 did not work for me; neither of the 2 links (original post and @beebek's answer) existed.

    What did work, however, is the comment by @user1495323 : I copied libusb-1.0.dll from C:\Users\username\AppData\Roaming\Python\Python27\site-packages\libusb\_platform\_windows\x64\ to C:\Windows\System32\

    0 讨论(0)
提交回复
热议问题