pyqt5项目向aarch64架构银河麒麟v10系统上迁移步骤
本文介绍了在QEMU虚拟机中安装银河麒麟V10 ARM架构系统的详细步骤。由于VMware不支持ARM架构模拟,作者采用QEMU方案,包括安装QEMU、配置虚拟网卡、创建虚拟硬盘和安装系统镜像等过程。文中提供了完整的QEMU启动命令参数说明,并解决了网络配置和共享文件夹访问问题。此外,还探讨了在麒麟系统中配置Python开发环境时遇到的问题,尝试了不同版本的Anaconda和Miniconda安装
1 说明
首先要说明的是,使用虚拟机实属无奈之举,国产麒麟系统本身优化就有待提高,qemu模拟cpu底层架构更是一大痛点,再加上我自己电脑也比较一般,这套方案pyqt5代码的迁移验证、打包,不适合直接在这套方案上进行开发,有条件的最好还是搞个实体机。
2 银河麒麟v10虚拟机安装
由于vmware不支持cpu架构模拟,所以我们通过qemu来安装银河麒麟V10arm架构的桌面版系统虚拟机,这一部分我主要参考的是这篇文章做的:qemu虚拟机 安装银河麒麟V10 arm架构系统 桌面版_vmware支持arm吗-CSDN博客
2.1 准备
1.qemu安装包:qemu-w64-setup-20220831.exe
2.tap-windows虚拟网卡安装包:tap-windows-9.21.2.exe
3.飞腾架构的银河麒麟v10系统镜像:Kylin-Desktop-V10-SP1-2403-Release-20240430-arm64.iso
4.系统启动引导:QEMU_EFI.fd
2.2 步骤
2.2.1 安装qemu
选个自己的安装路径,其他一路默认设置即可(我的安装路径:D:\others\qemu)
2.2.2 安装tap-windows
安装tap-windows(我的安装路径:D:\others\TAP-Windows),安装完后会多俩网卡,可能细节不太一样,不过大差不差,把其中带tap-windows adapter v9标志的那个改个简短无空格的名字,我改的是tap0

然后用你当前上网能用的那张网卡共享网络给这个虚拟网卡
2.2.3 分配虚拟硬盘
利用qemu-img给镜像分配虚拟硬盘:(我的虚拟机所在路径:D:\others\kylinV10)
qemu-img create -f qcow2 D:\others\kylinV10\kylindisk.qcow2 70G
2.2.4 安装虚拟机
运行虚拟机并在虚拟机中安装银河麒麟v10arm64版系统:
qemu-system-aarch64.exe -m 8192 -cpu cortex-a76 -smp 8,sockets=4,cores=2 -M virt -bios D:\others\kylinV10\QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd -drive if=none,file=D:\others\kylinV10\kylindisk.qcow2,id=hd0 -device virtio-blk-device,drive=hd0 -drive if=none,file=D:\others\kylinV10\Kylin-Desktop-V10-SP1-2403-Release-20240430-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom
分行版本:
qemu-system-aarch64.exe ^
-m 8192 ^
-cpu cortex-a76 ^
-smp 8,sockets=4,cores=2 ^
-M virt ^
-bios D:\others\kylinV10\QEMU_EFI.fd ^
-device VGA ^
-device nec-usb-xhci ^
-device usb-mouse ^
-device usb-kbd ^
-drive if=none,file=D:\others\kylinV10\kylindisk.qcow2,id=hd0 ^
-device virtio-blk-device,drive=hd0 ^
-drive if=none,file=D:\others\kylinV10\Kylin-Desktop-V10-SP1-2403-Release-20240430-arm64.iso,id=cdrom,media=cdrom ^
-device virtio-scsi-device ^
-device scsi-cd,drive=cdrom
参数说明:
-m 8192 表示分配给虚拟机的内存最大 8192 MB
-cpu cortex-a72 指定CPU类型,还可以选择cortex-a53、cortex-a57、cortex-a76等
-smp 4,cores=4,threads=1,sockets=1,cores=2指定虚拟机最大使用的CPU核心数等
-M virt 指定虚拟机类型为virt,具体支持的类型可以使用 qemu-system-aarch64 -M help 查看
-bios C:\work\vm\QEMU_EFI.fd 指定UEFI固件文件
-net nic,model=pcnet 启用网络功能
-device nec-usb-xhci -device usb-kbd -device usb-mouse 启用USB鼠标等设备
-device VGA 启用VGA视图,对于图形化的Linux这条很重要!
-drive if=none,file=Z:\uos.iso,id=cdrom,media=cdrom 指定光驱使用镜像文件
-device virtio-scsi-device -device scsi-cd,drive=cdrom 指定光驱硬件类型
-drive if=none,file=Z:\uos.img 指定硬盘镜像文件
运行这个命令,虚拟机会让你选择是安装系统还是直接打开镜像使用,我选择的安装系统,安装大概需要半小时,安装成后kylindisk.qcow2文件就会变大很多了,大概10个G,安装完进入系统后,视图如下:

2.2.4 启动虚拟机
也是通过命令行启动,我们可以把命令写成bat脚本,如下:(如果你的虚拟网卡名字和我不一样记得改最后一行)
qemu-system-aarch64.exe ^
-m 8192 ^
-cpu cortex-a76 ^
-smp 8,sockets=4,cores=2 ^
-M virt ^
-bios D:\others\kylinV10\QEMU_EFI.fd ^
-device VGA ^
-device nec-usb-xhci ^
-device usb-mouse ^
-device usb-kbd ^
-drive if=none,file=D:\others\kylinV10\kylindisk.qcow2,id=hd0 ^
-device virtio-blk-device,drive=hd0 ^
-drive if=none,id=cdrom,media=cdrom ^
-device virtio-scsi-device ^
-device scsi-cd,drive=cdrom ^
-net nic ^
-net tap,ifname=tap0
把该脚本扔到qemu的安装目录中,然后选择该脚本发送桌面快捷方式,下次你双击快捷方式即可直接启动麒麟系统虚拟机了
2.2.5 修改虚拟机网络配置
虚拟机内配置ipv4网络,使其与tap0处于同一局域网,网关设置为tap0的ipv4地址;
ip:192.168.137.2
子网掩码:255.255.255.0
网关:192.168.137.1
DNS:114.114.114.114
虚拟机用命令行测试一下ping 192.168.137.1和baidu.com如果都能ping通就没问题了
2.2.6 虚拟机访问主机共享文件夹
1.windows主机选个文件夹设为共享文件夹,我的文件夹名字是shareDir
2.虚拟机打开文件管理,输入smb://192.168.137.1/shareDir,键入回车要求输入登录账户和密码,这里需要填windows的用户账户和密码
3.连接成功后虚拟机即可访问读写主机的共享文件夹

3 运行环境准备与测试
3.1 软件及包的下载方法
软件或者依赖包可以在windows主机下载其aarch64版本的,然后扔到共享文件夹给虚拟机;也可以在麒麟的软件商店下载安装,存在一定概率安装失败,可以自己sudo dpkg手动安装,软件商店下载的包在这里:/home/cinbol/.cache/uksc/wget_down/deb(cinbol为自己的用户名),也可以直接通过可视化界面的链接打开,如下图:

3.2 pycharm或vscode编辑器
这俩任选其一即可,它们都可以从软件商店下载安装(vscode直接就能装上,pycharm商店默认安装会失败得自己用dpkg手动安装),pycharm吃性能一些,vscode相对轻量化,我用的比较顺手的是pycharm,这个操作流程中也是以pycharm为例的;
编辑器本质上是用来执行脚本命令、提供语法检查、debug功能的记事本plus,用啥影响不大,实在不行你用命令行执行[path of python]/python [path of script]/script.py,也能做简单的验证工作;
3.3 anaconda或miniconda或uv
anaconda或miniconda或uv都是python的虚拟环境管理工具,以前我一直用的都是anaconda,这次上来也是先尝试anaconda:
1.软件商店有anaconda(anaconda3_4.5.12_arm64.deb),下载完默认安装失败,手动安装成功,但这个版本非常老,而且安装完之后出现了各种奇怪的问题,折腾了一会后我放弃了打算换个版本;
2.我陆续尝试了(Anaconda3-2022.05-Linux-aarch64.sh Miniconda3-latest-Linux-aarch64.sh Miniconda3-py38_4.10.1-Linux-aarch64.sh Miniconda3-py310_25.1.1-2-Linux-aarch64.sh),在安装过程中,我都遇到了同一个问题:

这个问题非常抽象,我查了很久,也试了很久,就看到一个人遇到过这个类似的问题,不好解决,所以我考虑找找其他的虚拟环境管理工具。安装miniconda3的时候,碰到报错: Failed to execute script ‘entry_point‘ due to unhandled exception!(未解决)_sudo: unable to allocate pty: no such device-CSDN博客
3.uv似乎是一款挺新的python环境管理工具,我最后选择的它,它的安装比较顺利,在github上下载好uv-aarch64-unknown-linux-gnu.tar.gz包后,解压到指定路径,再添加一个环境变量即可使用,详细如下:
uv解压即安装,我的安装路径:
/home/cinbol/software/uv
uv需要添加系统变量,我是添加的用户级的环境变量,命令行执行下面的语句:
echo 'export PATH="$PATH:/home/cinbol/software/uv"'>>~/.bashrc
source ~/.bashrc
得到的.bashrc的文件内容(目前就一行,需要其他环境变量的另加):
export PATH="$PATH:/home/cinbol/software/uv"
在uv.toml文件中配置uv的镜像下载,其路径放在这里(没有的直接新建):
/home/cinbol/.config/uv
uv.toml的文件内容(目前就四行,一个python的下载镜像,一个pypi的下载镜像,需要其他镜像网址的另加):
python-install-mirror = "https://registry.npmmirror.com/-/binary/python-build-standalone/"
[[index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true
安装的uv截图:

吐槽:这个uv吹得挺牛逼,但我之前压根没听说过,可能确实跟不上技术迭代了2333,本次使用体验总体感觉是相对一般,下载安装包确实比较快,但移植性比不上conda(conda配好的环境随便挪到一个电脑就能用,这个uv配的环境python采用的软链接,挪项目到新电脑还得把python源拷过去)
3.4 配置虚拟环境
uv查看可用python版本:(不出意外的话,应该能看到系统自带的python版本,我的是/usr/bin/python3.8,还有一个/usr/bin/python3通过链接指向的/usr/bin/python3.8)
uv python list

uv下载一个想要的python版本:(为什么不直接用系统的3.8版本?因为考虑到迁移性,uv下载的python统一在/home/cinbol/.local/share/uv中,迁移时这个文件夹也可以跟着一块挪)
uv python install 3.8.20
uv在工程目录下创建一个新的虚拟环境:
uv venv wEnv38 --python 3.8.20
进入虚拟环境:
source wEnv38/bin/activate
查看环境中的包(刚创建的uv虚拟环境啥都没有):
uv pip list
查看某一个具体的包的版本:
uv pip show <package>
安装需要的各种python包:
uv pip install pip
uv pip install setuptools
...
3.5 特殊包的安装问题
作为aarch64的系统,在安装pyqt5、numpy、pandas等库时可能还会有坑:安装可能出现失败的情况,原因考虑是pip安装找不到合适的预编译的 Wheel 文件,回退到了源码编译模式,但由于编译需要的依赖不足、虚拟机内存、性能差等问题,这里基本都会失败,参考博客:Linux python .venv pip install PyQt5卡住/已杀死_pip install pyqt5 卡在metadata不动-CSDN博客
解决方案:避免在本地编译,使用系统自带的包管理器来安装由发行版维护者预编译好的二进制包
sudo apt update
sudo apt install python3-pyqt5
这样下载下来的包安装在这里:
/usr/lib/python3/dist-packages/PyQt5
/usr/lib/python3/dist-packages/PyQt5-5.14.1.dist-info
我们把这俩目录下的文件复制到自己创建的虚拟环境中的site-packages(/wEnv38/lib/python3.8/site-packages),这样虚拟环境就能访问到pyqt5包了;
对于pyqt5而言,其本身还有个python3-sip依赖,我们也是把相关的文件挪到虚拟环境的site-packages中,首先是在系统上查找sip及其位置:
其中实际涉及的就是红色圈出来这几项,我们把这些也复制到site-packages中,如此pyqt5在我们创建的wEnv38虚拟环境中就可用了
最终得到的wEnv环境列包如下:
3.6 运行验证
打开pycharm及自己的项目,选择解释器选择我们配置的wEnv38的python


运行验证如下图,成功啦,Cheers!

3.7 关于wEnv38环境迁移到新电脑的思考
考虑到uv虚拟环境python软链接的问题,我们迁移环境除了需要挪wEnv38文件夹,还需要挪/home/cinbol/.local/share/uv文件夹,这俩文件夹,wEnv38路径不做要求,/home/cinbol/.local/share/uv需要与原来的一致;亦或者我们再重走一遍流程重新配一遍…
当然你要是用的anaconda配置的环境,直接挪wEnv38虚拟环境文件夹即可
更多推荐



所有评论(0)