MacOS+Python3+libusb+pyusb配置+问题
前言
因为公司实习做的项目要求和仪器设备连接USB通信并且控制,因为还要显示波形什么的,所以就觉得直接用Python比较好,所以就自然而然想起来用pyusb库来访问USB接口,而我的开发设备一直是我的中配MBP,感觉很多操作比WIN本要顺手许多,于是MacOS+Python+pyusb的搭配就出现了许多问题。
起初
第一步:在Python3上管理和连接USB设备,我们必须要用到pyusb库,我们打开终端,输入一下命令,安装pyusb库。
pip3 install pyusb --user
注意:这里建议大家直接用pip3自带的库,因为根据我后面的理解MacOS+Python3的环境下,开发USB最好还是跟进最新的库,而国内的镜像源的库版本可能多多少少有些滞后(我猜的,嘿嘿)。
第二步:安装完毕之后,我们新建一个.py文件,输入以下代码进行测试。
# -*- coding: utf-8 -*-
import usb.core
dev = usb.core.find(find_all=True) #find all usb devices
for i in dev:
print(i) #print information of all usb devices
运行之后我们会惊奇地发现,系统会报这样的错误。
[Running] python3 "/Users/xxx/Desktop/AAA/SaleJuiceCode/BBB/test.py"
Traceback (most recent call last):
File "/Users/lxz/Desktop/Arona/SaleJuiceCode/SeismoPython/test.py", line 19, in <module>
dev = usb.core.find(find_all=True)
File "/usr/local/lib/python3.7/site-packages/usb/core.py", line 1297, in find
raise NoBackendError('No backend available')
usb.core.NoBackendError: No backend available
[Done] exited with code=1 in 0.075 seconds
‘No backend available’
直译过来就是“没有后端可用”,换句话说就是还缺一个底层连接支撑的文件。了解之后发现,还要安装一个libusb库(我在这里将一下我的理解,大家可以把libusb库理解为一个全平台的、连接pyusb库和硬件USB端口的库)。
第三步:在终端中,输入以下命令,安装libusb库。
pip3 install libusb --user
安装完毕之后,我们再用刚才的代码进行测试,结果发现还是同样的报错。
崩溃
在查阅有关python+libusb的资料之后我发现大多数都是Windows和Linux的。于是怀着疑惑不解的心情,我就顺着报错的代码一步一步点进去看,顺着libusb安装的位置一个一个文件夹点进去看,路径如下。
/usr/local/lib/python3.7/site-packages
在该路径下,有一个名为“libusb”
的文件夹,进去之后有一个名为“_platform”
的文件夹,再进去之后会有三个主流系统平台的文件夹,如下图所示。
每一个平台下面都会有两个文件夹:一个名为“x64”
,一个名为”x86“
。而文件夹中则有一个名为”libusb-1.0.dll“
的dll文件,唯独Mac的”_osx“
文件夹里没有类似的文件,而是空空如也,如下图所示。
Windows平台下:
OSX平台下:
真所谓空空如也。
想必Python报错,之所以没有支撑文件,就是因为这个文件夹里什么都没有!我直接裂开!!!
柳暗花明
正在我苦恼万分的时候,我看到了一篇文章:PyUSB-Dev-Env on Mac with libusb
这篇文章真的是救我于水生火热之中,我对作者表示100分的感激!(我看了这个作者写的博客,有不少也是解决如何在MacOS上开发MCU单片机)
第四步:根据这篇博客的介绍,我们应该使用Homebrew来安装libusb库(具体原因我后来查阅其他资料知晓了,后面再说)于是,我们在终端中输入以下命令。
brew install libusb-compat libusb
第五步:静静地等待安装完成之后,再使用之前写好的测试代码进行测试。功夫不负有心人,终于成功!!!
最终效果如下图所示。
到这里就算是配置成功了!下面还有一些小技巧和原因讲解,不感兴趣的可以撤了。
其他
MacOS查看USB设备
第一步:点击电脑左上角的苹果标志“”
。
第二步:点击“关于本机”
。
第三步:点击“系统报告...”
。
第四步:找到“USB”
,就可以查看了。
MacOS无法通过pip安装libusb使用的原因
随着我查阅资料的增多,我就找到了libusb·PyPI的官方网站了:libusb Project description
通过阅读网站的一些版本更新文档,我们不难发现在libusb-1.0.22b6(2019-11-23)
版本的时候才支持Linux,而且从一开始的文档到现在就没有提到MacOS所以估计通过pip3安装的libusb库和Homebrew安装libusb库是同一个库,只是更新维护的进度不太一样。
最后
后续USB开发经验也会陆续分享到我的博客里。