【问题标题】:PyUSB ValueError: No Backend available on windows 7. windows is detecting the device while pyusb is not detectingPyUSB ValueError:Windows 7 上没有可用的后端。Windows 正在检测设备,而 pyusb 未检测到
【发布时间】:2016-07-03 06:56:26
【问题描述】:

我已经尝试了所有可能的方法,但无法解决这个错误。有人解决了这个问题吗?

>>> import usb.core
>>> import usb.util
>>> dev=usb.core.find(idVendor=0x04D8)

我得到的错误是:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    dev=usb.core.find(idVendor=0x04D8)
  File "C:\Python27\lib\site-packages\usb\core.py", line 1199, in find
    raise ValueError('No backend available')
ValueError: No backend available

在它没有显示任何此类问题之前,它最近显示了该错误。 尝试在目录 C:\Python27 中包含 libusb0_x​​86.dll 但仍然显示错误。我还为设备驱动程序安装了 libusb-win32 inf 向导。请这里的任何 python 专家帮助我解决这个错误。

【问题讨论】:

    标签: python-2.7 libusb pyusb libusb-1.0 libusb-win32


    【解决方案1】:

    每当我们使用 PyUSB 模块与 PC 进行 USB 通信时,PyUSB 模块都会检查 PATH environment variable 中的 libusb0.dll 和 libusb-1.0.dll 文件(充当后端) strong>C:\windows\System32 定位,然后与 USB 设备建立通信。由于我使用 libusb-win32-wizard 创建设备驱动程序,因此它使用 libusb0.dll。执行过程可以通过以下DEBUG程序找到:

    import os
    os.environ['PYUSB_DEBUG'] = 'debug'
    import usb.core
    print list(usb.core.find(find_all=True))
    

    当我在Shell中执行上述程序时,我得到的输出是:

    2016-03-26 11:41:44,280 ERROR:usb.libloader:'Libusb 1' could not be found
    2016-03-26 11:41:44,280 ERROR:usb.backend.libusb1:Error loading libusb 1.0 backend
    2016-03-26 11:41:44,280 ERROR:usb.libloader:'OpenUSB library' could not be found
    2016-03-26 11:41:44,280 ERROR:usb.backend.openusb:Error loading OpenUSB backend
    2016-03-26 11:41:44,280 INFO:usb.core:find(): using backend "usb.backend.libusb0"
    2016-03-26 11:41:44,280 DEBUG:usb.backend.libusb0:_LibUSB.enumerate_devices()
    2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E530>)
    2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E5D0>)
    2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E6C0>)
    2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E7B0>)
    2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E8A0>)
    2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E990>)
    2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200EA80>)
    2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200EB70>)
    [<DEVICE ID 046d:c05a on Bus 000 Address 001>, <DEVICE ID 046d:c31d on Bus 000 Address 002>, <DEVICE ID 046d:c31d on Bus 000 Address 003>, <DEVICE ID 046d:c31d on Bus 000 Address 004>, <DEVICE ID 04d8:feaa on Bus 000 Address 005>, <DEVICE ID 046d:082b on Bus 000 Address 006>, <DEVICE ID 046d:082b on Bus 000 Address 007>, <DEVICE ID 046d:082b on Bus 000 Address 008>]
    

    因此,由于我在 usb.core.find() 函数中将参数设为 find_all=True,因此它返回每个连接到 PC 的设备 ID。同样在前 4 行它给出了错误,因为我们使用了 lib-usb-win32-wizard,它使用了 libusb0.dll,因此在第 5 行它给出了INFO:usb.core:find(): using backend "usb.backend.libusb0",这意味着它正在使用 libusb0.dll 与 USB 设备进行通信。

    【讨论】:

      【解决方案2】:

      首先改变你的第三行。您必须使用 idVendor 和 IdProduct 找到您的设备。所以使用这个命令:

      dev = usb.core.find(idVendor=0xYYYY, idProduct=0xYYYY)
      

      只需将 YYYY 替换为正确的信息即可。

      另一个可能的问题是,当您运行代码时,驱动程序已经在使用您的设备。 尝试以管理员身份运行您的代码。

      【讨论】:

      • 我通过我们也可以给idVendor=0xYYYY的方式来解决问题。然后它将打印出该代码使用该特定 VID 识别的第一个设备。问题是我没有在 PATH 环境变量位置中包含 libusb0.dll 和 libusb-1.0.dll 文件(在我的情况下为 C:\Python27)
      猜你喜欢
      • 2012-11-26
      • 2011-07-20
      • 2014-11-03
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      相关资源
      最近更新 更多