在 Apple Silicon 上配置 PyQt5 以及 LabelImg
在 Apple Silicon 上配置 PyQt5 以及 LabelImg #
最近突然需要继续做一些数据标注的任务,下载好了之前经常用的 Labelme 后发现输出的标记文件是 json 格式的,不符合项目规范。发现 labelImg 这款标注软件刚好是输出 xml 作为标记文件的,十分合适。
但是由于最近刚刚换了电脑,时隔一年的试用后终于把我的主力机换到了 Apple Silicon 平台上来,随之而来的就是这一系列的配置问题。
Q-问题 #
官方的安装文档向来是非常重要的部分。主要是在执行 pip3 install pyqt5 lxml # Install qt and lxml by pip
的时候报错,直接 error。
在这一部分可能会有很多的人会遇到与我相似的问题,故将整个问题的出现与操作列出。
一般到这里复制错误信息到 Google 会发现有一部分用户也遇到了这类问题,主要的原因就是 arm64 架构和此处的 PyQt5 不兼容所导致的。
此时可以尝试利用 homebrew 中更新的命令:brew install pyqt@5
进行安装。
并且可以看到这个命令安装的 PyQt5 已经是适配 arm64 架构的版本了。
但此时如果继续按照官方文档走下去安装,会发现在安装labelimg的时候依旧会报错。并且所报的错误与之前几乎完全相同。
此时就可以发现,整个的错误原因都是来源于PyQt5没有正确导入造成的。虽然已经在本地安装好相应的包了,但是并没有导入到对应的Python环境当中,导致无法正确使用。如果在此时尝试直接下载GitHub的源码编译安装的话,会非常直接的发现报错内容为:PyQt5 import error
正确准备arm64架构上的PyQt5 #
Outline #
- 安装并转移 pyqt5 arm64 版本: M1 Mac 安装 PyQt5 的方法 - 知乎
- 直接 pip 安装 labelimg
- 打开即可使用。且为 arm64 版本,性能极佳。
创建虚拟环境(推荐) #
非常推荐利用python和conda自带的虚拟环境来管理各种不同的空间和包,这样能做到最大限度的解耦,并且即用即取,不用即弃,也不易污染dev环境。
- 创建空间:
conda create -n "your_env_name" python="3.9"
- 激活空间:
conda activate your_env_name
由于labelimg的当前支持版本为Python3.9,此处便直接填入。
安装PyQt #
此处利用homebrew作为包管理器
- 安装arm64架构的PyQt5:
brew install pyqt@5
迁移——最重要的环节 #
这一步迁移就决定了可以实现完全原生arm64架构的PyQt5体验,并且基于这一套包的上层应用都可以在原生Apple Silicon架构中运行,获得最佳的性能和能耗表现。
- 通过
conda env list
查看环境列表和路径
切换到环境目录下,寻找对应的site-package
目录。此目录下存放了全部在此python版本下安装的包文件。
拷贝PyQt5到对应的目录下
- `cp -r PyQt5/ /opt/homebrew/Caskroom/miniforge/base/envs/label/lib/python3.9/site-packages
全部准备工作就做好了。可以通过相应的命令来检测是否安装正确:
import PyQt5
没有报错即包导入成功
安装labelimg #
pip install labelimg
即可成功安装。
安装后在相应路径下打开python env,输入labelimg .
即可打开程序