41

我正在尝试通过 USB 将我的 Python 应用程序接口与 NFC 设备连接。最好的选择似乎是PyUSB,但我无法让它连接到 libusb 后端。我不断得到

ValueError:没有可用的后端

我查看了堆栈跟踪,发现usb/backend/libusb10.py(它是 pyusb 的一部分)正在尝试加载libusb-1.0.dll以用作后端,但找不到它。不是它不在我的路径上,它根本不在我的电脑上!

我已经安装了libusb-win32,但生成的目录似乎只包含 libusb0.dll。libusb-1.0.dll 在哪里???

我很想知道从哪里获取该 dll,甚至想知道让 PyUSB 在 Windows 7 上运行的不同建议。

4

12 回答 12

22

下载并安装libusb-win32-devel-filter-1.2.6.0.exe。它应该工作。

于 2015-07-10T03:46:31.563 回答
8

我最近尝试与我正在开发的 USB 设备交谈时遇到了类似的问题。我在网上搜寻 libusb-1.0.dll 并没有运气。我找到了源代码,但没有构建并准备安装。我最终安装了 libusb-win32 二进制文件,即 libusb0.dll。

PyUSB 将搜索 libusb-1.0、libusb0 和 openUSB 后端。

libusb0.dll 已经在我的系统上,但仍然没有正确设置,PyUSB 没有工作。

我按照此处的说明使用提供的用于安装过滤器驱动程序的 GUI 工具和 INF 向导下载并安装驱动程序。请注意,在我运行 INF 向导之前它不起作用。

我对编程很陌生,我发现缺乏清晰的文档/示例来将这一切串在一起相当令人沮丧。

于 2012-12-26T22:04:16.253 回答
6

我正在使用 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\system32PYUSB没有找到图书馆。我更新了path变量,现在 USB 正在工作。

于 2013-04-30T20:45:49.627 回答
4

有一个更简单的解决方案。

从下载链接下载libusb-1.0.20 并解压到 C:\PATH

然后试试这一行:

后端 = 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(后端=后端,find_all=True)

根据您的系统,尝试使用 MS64 或 MS32 版本的 .dll

2020 年 1 月 17 日更新,请求分享更多代码后:

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()
于 2019-10-03T06:36:28.470 回答
3

我在 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\

于 2019-03-15T12:23:37.857 回答
2
  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

这种方法对我有用。

于 2020-06-26T02:32:44.323 回答
1

“libusb API 有两个版本:当前的libusb-1.0API 和它的旧版本libusb-0.1。” ( http://www.libusb.org/ ) "libusb-win32是 USB 库 <code>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,而最新的来源来自 2014-06-15。

于 2014-09-16T12:49:59.503 回答
1

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
于 2021-06-21T07:56:22.037 回答
0

要使用 PYUSB 通过 USB 连接到您的 NFC 设备,您需要为该设备安装后端。我认为除了 libusb 设备之外的任何设备都没有任何后端。

建立一个后端。您需要知道设备的驱动程序(.sys 文件),因此您可以编写一个包装 DLL 来公开设备中的功能。您的 DLL 必须有一种基于 PID 和 VID 查找设备的方法、另一种打开设备的方法和另一种发送数据的方法等等......

于 2014-08-06T18:55:02.387 回答
0

以防万一:

我没有在 Windows 上尝试过,但我必须设置 DYLD_LIBRARY_PATH 路径来规避 Macintosh 上的这个错误。

导出 DYLD_LIBRARY_PATH=/opt/local/lib

关于是否设置这个变量的讨论在这里

于 2015-03-15T09:15:58.677 回答
0

libusb后端由/usb路径中的python脚本初始化,通过从Windows PATH加载二进制DLL,如果zadig的虚拟DLL丢失或安装,它会抱怨这个。因为zadig安装的DLL不导出任何外部世界的符号(我猜是虚拟的)

于 2021-01-02T10:12:18.107 回答
0

当我在Windows x64上安装pyusblibusb时,在 2022 年 backendnotavailable 出现了一些问题。


我找到了解决它的方法阅读 - > Github解决解释

要解决此问题,首先您需要在系统的 PATH 变量中复制 libusb-1.0.dll (..\envs<your_env_name>\Lib\site-packages\libusb_platform_windows\x64)的路径。

其次重启IDE。

第三次尝试 get_backend 使用 usb.backend:

import usb.core
from usb.backend import libusb1

# it should find libusb-1.0.dll at our path variable
back = libusb1.get_backend()
print(type(back))  # return: <class 'usb.backend.libusb1._LibUSB'>

dev = usb.core.find(backend=back)
print(type(dev))  # return: <class 'usb.core.Device'>

# flag 'find_all=True' would return generator
# reprecent connected usb devices

dev_list = usb.core.find(find_all=True, backend=back)
print(type(dev_list)) # return: <class 'generator'>

如果返回是 a NoneType,则表示get_backend()没有找到 libusb-1.0.dll 或找到错误的 usblib(这是我的问题 - 我在 x64 机器上将 atPATH 变量路径复制到 _x86 文件)。


另一种解决方法->将 libusb-1.0.dll 从(.._x64\libusb-1.0.dll) 复制(C:\Windows\System32)

于 2022-01-14T12:01:38.320 回答