Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python windows上的Pyusb-没有可用的后端_Python_Windows 7_Libusb_Pyusb - Fatal编程技术网

Python windows上的Pyusb-没有可用的后端

Python windows上的Pyusb-没有可用的后端,python,windows-7,libusb,pyusb,Python,Windows 7,Libusb,Pyusb,我正在尝试通过USB将python应用程序接口与NFC设备连接起来。 最好的选择似乎是pyusb,但我无法让它连接到libusb后端。 我一直在 ValueError:没有可用的后端 我查看了堆栈跟踪,发现usb/backend/libusb10.py(它是pyusb的一部分)正在尝试加载libusb-1.0.dll,以用作后端,但它找不到它。这不是说它不在我的路径上,它根本不在我的计算机上 我已经安装了libusb-win32(),但生成的目录似乎只包含libusb0.dll。libusb-1

我正在尝试通过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在Windows7上工作的不同建议

我最近在尝试与正在开发的USB设备通话时遇到了类似的问题。我在网上搜索libusb-1.0.dll,但没有找到任何运气。我找到了源代码,但没有生成任何可安装的代码。我最后安装了libusb-win32二进制文件,即libusb0.dll

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

libusb0.dll已在我的系统上,但某些设置仍然不正确,do PyUSB不工作

我按照说明使用安装过滤器驱动程序所提供的GUI工具和INF向导下载并安装驱动程序。注意,直到我运行INF向导,它才起作用


我对编程非常陌生,我发现缺乏清晰的文档/示例来将这些内容组合在一起相当令人沮丧。

我在windows XP系统上使用Python2.6.5、
libusb-win32-device.bin-0.1.12.1
pyusb-1.0.0-a0
,并不断收到
ValueError:No backend available


由于这个问题在web上没有任何真正的帮助,我花了很多时间发现
ctypes util.py
使用
Path
变量来查找库文件。我的
路径
未包含
windows\system32
并且
PYUSB
未找到库。我更新了
路径
变量,现在USB正在工作。

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

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

“libusb API有两个版本:当前的
libusb-1.0
API,以及它的旧版本
libusb-0.1
”(
libusb-win32
是USB库的一个端口​<代码>libusb-0.1到Microsoft Windows操作系统”。从(
1.0.9
是当前版本)下载最新版本的tarball要想拥有与之相当的
libusb-1.0
,你会找到一个文件夹
Win32
,在那里你可以找到你的
libusb-1.0.dll
!您甚至可以构建它:

编辑 您必须构建它(从/下载),因为tarball是从2012年开始的,而最新的来源是从2014年6月15日开始的。

以防万一:

我没有在Windows上尝试过这个,但我必须在Macintosh上设置DYLD_LIBRARY_PATH来避免这个错误

导出动态库路径=/opt/local/lib


是否设置此变量的讨论正在进行。

下载并安装。它应该可以工作。

我在Windows 10上遇到了同样的问题,包括Python 2.7.16和Python 3.7.2。我安装了libusb(通过python-mpip安装libusb),但是错误消息仍然存在。另外,上面关于安装libusb-win32的建议对我也不起作用;这两个链接(原始帖子和@beebek的答案)都不存在

然而,起作用的是@user1495323的评论:我从中复制了
libusb-1.0.dll
C:\Users\username\AppData\Roaming\Python27\site packages\libusb\\u platform\\u windows\x64\

对于
C:\Windows\System32\
有一个更简单的解决方案

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

然后试试这句话:

backend=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(backend=backend,find\u 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()
  • 下载最新的libusb

  • 将MS32\dll\libusb-1.0.dll复制到C:\Windows\SysWOW64

    将MS64\dll\libusb-1.0.dll复制到C:\Windows\System32

    三,

  • 将MS32\dll\libusb-1.0.dll复制到C:\Python\Python37-32\Lib\site packages\libusb\u platform\u windows\x86

    将MS64\dll\libusb-1.0.dll复制到C:\Python\Python37-32\Lib\site packages\libusb\u platform\u windows\x64


    这个方法对我很有用。

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

    考虑到这是关于XP的(OP要求回复:Windows 7),作为一个注释,这可能会更好。我将当前文件夹添加到
    路径
    。这就是诀窍!需要将libusb-1.0.dll放入system32目录。确保它适合您的系统(32位或64位)是的,运行inf向导并选择要启动的设备。@Jonicanada我似乎遇到了与Garrett Hyde相同的问题。但不同的是,我下载并解压缩了文件(libusb1.0.20),然后复制了一个dll文件,指定
    pip install libusb