Pyusb 和 Libusb 在 MacOS 上给出 NoBackendError

问题描述

我在 MacOS Big Sur 上尝试运行 rfcat。我也在运行 anaconda,当我最初使用 python3.x 出现错误时,我已经使用 Python2.7 设置了一个环境。我已经下载了 pyusbpyreadlineipythonpyside2libusb 依赖项。 Libusb 似乎给我带来了最大的麻烦。我不断收到以下错误

Error in resetup():NoBackendError('No backend available',)
Error in resetup():NoBackendError('No backend available',)
^CTraceback (most recent call last):
  File "/opt/anaconda3/envs/rftools/bin/rfcat",line 4,in <module>
    __import__('pkg_resources').run_script('rfcat==1.9.5','rfcat')
  File "/opt/anaconda3/envs/rftools/lib/python2.7/site-packages/pkg_resources/__init__.py",line 666,in run_script
    self.require(requires)[0].run_script(script_name,ns)
  File "/opt/anaconda3/envs/rftools/lib/python2.7/site-packages/pkg_resources/__init__.py",line 1469,in run_script
    exec(script_code,namespace,namespace)
  File "/opt/anaconda3/envs/rftools/lib/python2.7/site-packages/rfcat-1.9.5-py2.7.egg/EGG-INFO/scripts/rfcat",line 63,in <module>

  File "build/bdist.macosx-10.7-x86_64/egg/rflib/__init__.py",line 208,in interactive
  File "build/bdist.macosx-10.7-x86_64/egg/rflib/chipcon_nic.py",line 103,in __init__
  File "build/bdist.macosx-10.7-x86_64/egg/rflib/chipcon_usb.py",line 93,line 238,in resetup
KeyboardInterrupt

从我目前的研究来看,后端是 pyusb 如何指代 libusblibusb1openusb。它无法在环境中找到 libusb。我做了一点跟踪,发现最终在 util.py 的 find_library() 中找到了 ctypes 函数。它指的是带有 @executable_path/../lib/libusb%s..... 的 MacOS 的可执行路径我试图将 libusb 放入我的可执行路径上的文件夹中以希望与此函数搜索匹配,但仍然遇到相同的错误。然后我找到了有关为 pyusb here 输入后端自定义路径的说明。这似乎是一种在程序开头输入设备和后端信息的方法。我插入的代码如下:

import usb.core
import usb.backend.libusb1 as libusb1

backend = libusb1.get_backend(find_library=lambda x: "/path/to/file/lib/libusb-1.0.0.dylib")
dev = usb.core.find(idvendor=“MyVID”,idProduct=“MyPID”,backend=backend)

当我将代码放在 rflib.initrfcat 代码中时,这引发了类似的错误,但具有不同的回溯:

Traceback (most recent call last):
  File "/opt/anaconda3/envs/rftools/bin/rfcat",line 12,line 15,in <module>
  File "/opt/anaconda3/envs/rftools/lib/python2.7/site-packages/usb/core.py",line 1304,in find
    raise NoBackendError('No backend available')
usb.core.NoBackendError: No backend available

此后我已将事情重置为我开始时的状态,但仍然出现上面列出的原始错误

我认为这很大程度上与 anaconda 环境有关,我当然可以将其删除。我想尝试找到一种方法来完成这项工作。有没有更好的方法来帮助 rfcat 根据需要找到 libusb?另一种可能的解决方案是解析实际的 executable_path。有谁知道如何找到executable_path?

如果有帮助,我会列出命令和文件认位置。

rfcat:/opt/anaconda3/envs/rftools/lib/python2.7/site-packages/rfcat

pyusb:/opt/anaconda3/envs/rftools/lib/python2.7/site-packages/usb

ctypes:/opt/anaconda3/envs/rftools/lib/python2.7/ctypes

libusb:/opt/anaconda3/envs/rftools/lib/python2.7/site-packages/usb/lib

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)