python - PyUSB 与 Windows、libusb1 和 libusb-win32 后端不工作

标签 python python-3.x windows

我正在尝试从 USB 设备读取数据。为此,我使用 PyUSB,但这会引发多个问题。

错误

使用 libusb-win32,找不到任何设备。在发现它的支持有限后,我转向了 libusb1

使用libusb1,可以找到一些设备,但会引发错误NotImplementedError:此平台上不支持或未实现操作

设置

我使用的是 Windows10,设备是 M10 10 磅数字邮政秤

我正在使用 Zadib 使用以下设置安装设备驱动程序 enter image description here

设备连接后,我可以在设备管理器中看到它。

我已经下载了 libusb-win32 的源代码和 libusb1并将它们添加到 %PATH% 环境变量中(但 %PATH% 中一次只有一个,所以我知道正在使用哪个)。

  • 如果 PATH 没有指向 .dll 文件之一,PyUSB 会引发未找到后端的错误

代码

import usb.core
import usb.util

# find the USB device
for device in usb.core.find(find_all=True):
    print(device)

完整错误消息

请注意,在出现此错误消息之前,已成功打印两个设备

Traceback (most recent call last):


File "C:\ProgramData\Anaconda3\lib\site-packages\usb\core.py", line 727, in __str__
    for configuration in self:
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\core.py", line 1094, in __iter__
    yield Configuration(self, i)
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\core.py", line 586, in __init__
    configuration
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\backend\libusb1.py", line 757, in get_configuration_descriptor
    config, byref(cfg)))
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\backend\libusb1.py", line 595, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 2] Entity not found

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "reading_dymo_scale.py", line 22, in <module>
    print(device)
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\core.py", line 731, in __str__
    configuration = self.get_active_configuration()
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\core.py", line 875, in get_active_configuration
    return self._ctx.get_active_configuration(self)
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\core.py", line 102, in wrapper
    return f(self, *args, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\core.py", line 236, in get_active_configuration
    self.managed_open()
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\core.py", line 102, in wrapper
    return f(self, *args, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\core.py", line 120, in managed_open
    self.handle = self.backend.open_device(self.dev)
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\backend\libusb1.py", line 786, in open_device
    return _DeviceHandle(dev)
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\backend\libusb1.py", line 643, in __init__
    _check(_lib.libusb_open(self.devid, byref(self.handle)))
  File "C:\ProgramData\Anaconda3\lib\site-packages\usb\backend\libusb1.py", line 593, in _check
    raise NotImplementedError(_strerror(ret))
NotImplementedError: Operation not supported or unimplemented on this platform

最佳答案

昨晚经过几个小时的反复试验,我找到了解决方案。当然现在看来很明显

  • zadib 驱动程序应与后端驱动程序相匹配,两者均应为 libusb-win32,到目前为止,其他驱动程序/后端还没有成功

解决方案

  1. 下载libusb-win32 sources
  2. libusb-win32/bin/amd64/ 文件夹添加到 %PATH% 环境变量中,以便 PyUSB 可以找到它
  3. 安装 PyUSB pip install pyusb
  4. 如果您需要为 USB 设备安装驱动程序,请下载 zadig
  5. 打开 zadig 并使用 libusb-win32 驱动程序添加 USB 设备。示例enter image description here
  6. 您现在应该能够运行您的代码,尝试使用
  7. 进行测试
import usb.core
import usb.util

# find the USB device
for device in usb.core.find(find_all=True):
    print(device)

调试

  • 如果在设置 PATH 之前终端已打开,则需要打开一个新终端
  • 如果仍然找不到驱动程序,请尝试重新启动。另请检查设备管理器,看看是否可以通过这种方式找到设备

关于python - PyUSB 与 Windows、libusb1 和 libusb-win32 后端不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54162872/

相关文章:

windows - 将字符串解析为 ARGV 等效项(Windows 和 Perl)

windows - 在 Windows 上使用 cabal 安装 pango 和 GIO 时,CULLong 类型的构造函数不可见

python-3.x - Django 通过加密字段过滤不起作用

python - 在Python中读取UDP数据的更好方法

python - 如何避免 selenium webdriver 的套接字超时?

python - 我应该如何处理在我的 setup.py 脚本中导入第三方库?

python - python3中的operator.idiv在哪里?

python - 如果其他数据框中存在行,则从 pandas 数据框中删除行

c++ - 为什么在使用 VS 2008 构建 DLL 时不遵循 "Use MFC in a Static Library"设置?

python - 如何使用 pylint 1.8.2 生成 html 报告以在 gitlab-ci 页面中发布?