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.1
和libusb1
代表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?
我无法将我的 v-model 数据传递到我的后端以获取 vue.js 中的单选按钮类型,如何将选中的单选按钮值传递给我的后端?