PyUSB ValueError:没有可用的后端

Posted

技术标签:

【中文标题】PyUSB ValueError:没有可用的后端【英文标题】:PyUSB ValueError: No backend available 【发布时间】:2014-11-03 13:09:31 【问题描述】:

我在 Win 7 操作系统上运行 Python 2.7.8。我正在尝试通过 PyUSB 与 USB 设备(Numato 32 通道 GPIO 设备)通信。

我从网址下载了 walac-pyusb-7071ad3:http://walac.github.io/pyusb

我停止收到“ValueError:没有可用的后端”。有哪位 Python 专家能告诉我哪里错了吗?

代码如下:

import sys
import usb
import usb.core
import usb.util
import usb.backend.libusb1

backend = usb.backend.libusb1.get_backend(find_library=lambda C:'\Python27')
numato = usb.core.find(idVendor=00000006,idProduct = 00000000, backend=backend)

这是 Python 错误消息:

Traceback (most recent call last):
  File "C:\Python_Yang\PyUSBNumato.py", line 19, in <module>
    numato = usb.core.find(idVendor=00000006,idProduct = 00000000, backend=backend)
  File "C:\Python_Yang\usb\core.py", line 1199, in find
    raise ValueError('No backend available')
ValueError: No backend available

【问题讨论】:

Pyusb on windows - no backend available的可能重复 【参考方案1】:

我有同样的错误,但我没有成功使用find_library(TypeError: get_backend() got an unexpected keyword argument 'find_library')。 我想,虽然你没有说,backend 是无效的(None)。

您在路径 C:\Python27 中有 libusb1 实现吗?我想你没有将它安装在 Python 的文件夹中,如果是这样,你的答案就是:PyUSB backend not accessible。

否则,不使用find_library,您必须在PATH 环境变量中提供libusb1 实现。我是这样做的(你可以用你的位置替换os.getcwd()):

def get_backend_libusb01():
    libusb01_location = os.getcwd()

    # load-library (ctypes.util.find_library) workaround: also search the current folder
    is_current_folder_in_search_path = True
    if None == usb.backend.libusb0.get_backend():
        is_current_folder_in_search_path = libusb01_location in os.environ['PATH']
        if not is_current_folder_in_search_path:
            os.environ['PATH'] += os.pathsep + libusb01_location

    backend = usb.backend.libusb0.get_backend()

    if not is_current_folder_in_search_path:
        os.environ['PATH'] = os.environ['PATH'].replace(os.pathsep + libusb01_location, "")

    return backend

【讨论】:

以下是一些更新: 最终,我发现 USB 设备并不是真正的 USB 设备,而是 RS-232 Emulation 设备。现在问题通过使用pyserial进行通信解决了。 相关问题:***.com/questions/13773132/… 很抱歉劫持 cmets,但我在运行您的函数时遇到了一些问题,因为 usb.backend.libusb01 未定义:dir(usb.backend) ['IBackend', '__all__', '__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '_not_implemented', '_objfinalizer']。我已经从 walac 的仓库安装了 pyusb 1.0,并且已经安装了 libusb-1.0。我错过了什么吗? libusb01 在最新版本的PyUSB 中重命名为libusb0,还要注意libusb0 代表libusb-0.1libusb1 代表libusb-1.0 (libusb.org) .另外,请注意“libusb-win32 是 USB 库 libusb-0.1 的端口”,即使版本是 1.2.6。我更改了代码以反映更改,谢谢! 感谢利维乌。我注意到 libusb0 已定义但 libusb01 未定义,但令人困惑的是哪个子模块会导致什么。感谢您解释这一点。【参考方案2】:

我遇到了这个麻烦,我切换了 python libusb 包装器并且它消失了:https://github.com/vpelletier/python-libusb1

【讨论】:

【参考方案3】:

我做到了: - 下载并安装 libusb-win32-devel-filter-1.2.6.0.exe。它应该可以工作。

发件人:

Pyusb on windows - no backend available

真的很适合我。

【讨论】:

以上是关于PyUSB ValueError:没有可用的后端的主要内容,如果未能解决你的问题,请参考以下文章

Windows 8.1 上的 Pyusb - 没有可用的后端 - 如何安装 libusb?

已安装 libusb - 但未找到 pyUSB 后端

我无法将我的 v-model 数据传递到我的后端以获取 vue.js 中的单选按钮类型,如何将选中的单选按钮值传递给我的后端?

PyUSB 后端无法访问

设备在 PyUSB 上不可用

用lvs+keepalive构建高可用的后端nginx+tomcat