如何编译Python、QT5应用并制作树莓派单应用自定义ISO镜像
用Buildroot部署Python+Qt5程序到树莓派
1. 基础配置Buildroot
- 下载对应树莓派型号的初始配置:
make raspberrypi4_defconfig(根据硬件调整,如raspberrypi3_defconfig) - 进入图形配置界面:
make menuconfig - 启用核心依赖组件:
Target packages→Interpreter languages and scripting→python3:勾选Python3核心包,以及程序依赖的python3-pyqt5、python3-pyqt5-qtbase等(按需选择QtWidgets、QtGui等子模块)Target packages→Libraries→Graphics→qt5:启用对应Qt5库,确保Python绑定模块被选中
2. 打包自定义Python程序
- 将代码、UI文件、图标等资源整理到
my_qt_app/目录,包含主程序main.py - 创建Buildroot自定义包:
- 在Buildroot的
package/目录下新建myqtapp文件夹 - 创建
myqtapp.mk文件,内容示例:MYQTAPP_VERSION = 1.0 MYQTAPP_SITE = $(TOPDIR)/../path/to/your/my_qt_app MYQTAPP_SITE_METHOD = local MYQTAPP_DEPENDENCIES = python3 python3-pyqt5 define MYQTAPP_INSTALL_TARGET_CMDS $(INSTALL) -d $(TARGET_DIR)/usr/share/myqtapp $(INSTALL) -m 0755 $(MYQTAPP_SITE)/*.py $(TARGET_DIR)/usr/share/myqtapp/ $(INSTALL) -m 0644 $(MYQTAPP_SITE)/*.ui $(TARGET_DIR)/usr/share/myqtapp/ $(INSTALL) -m 0644 $(MYQTAPP_SITE)/icons/* $(TARGET_DIR)/usr/share/myqtapp/icons/ # 生成启动脚本 $(INSTALL) -d $(TARGET_DIR)/usr/bin echo '#!/bin/sh' > $(TARGET_DIR)/usr/bin/run_myapp echo 'cd /usr/share/myqtapp && python3 main.py' >> $(TARGET_DIR)/usr/bin/run_myapp chmod 0755 $(TARGET_DIR)/usr/bin/run_myapp endef $(eval $(generic-package)) - 回到
menuconfig,在Target packages→Miscellaneous中勾选myqtapp
- 在Buildroot的
3. 设置开机自启
- 选择init系统(systemd或sysvinit),以systemd为例:
在myqtapp.mk中添加service安装逻辑:
同时在define MYQTAPP_INSTALL_INIT_SYSTEMD $(INSTALL) -D -m 644 $(MYQTAPP_SITE)/myqtapp.service $(TARGET_DIR)/etc/systemd/system/myqtapp.service ln -sf /etc/systemd/system/myqtapp.service $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/myqtapp.service endefmy_qt_app/目录下创建myqtapp.service:[Unit] Description=My Qt5 Python App After=multi-user.target [Service] ExecStart=/usr/bin/run_myapp Restart=always User=root [Install] WantedBy=multi-user.target
4. 编译与烧写
- 执行编译:
make -j$(nproc) - 烧写镜像到SD卡:
替换dd if=output/images/sdcard.img of=/dev/sdX bs=4M status=progress/dev/sdX为你的SD卡设备名
用Yocto部署Python+Qt5程序到树莓派
1. 初始化Yocto环境
- 拉取稳定分支(以kirkstone为例)的代码:
git clone git://git.yoctoproject.org/poky -b kirkstone cd poky git clone git://git.yoctoproject.org/meta-raspberrypi -b kirkstone git clone git://git.yoctoproject.org/meta-python -b kirkstone git clone git://git.yoctoproject.org/meta-qt5 -b kirkstone - 初始化构建环境:
source oe-init-build-env build-rpi - 在
build-rpi/conf/bblayers.conf中添加依赖层:BBLAYERS += "${TOPDIR}/../meta-raspberrypi" BBLAYERS += "${TOPDIR}/../meta-python" BBLAYERS += "${TOPDIR}/../meta-qt5" - 在
build-rpi/conf/local.conf设置机器型号:MACHINE = "raspberrypi4-64" # 按需调整为raspberrypi3等
2. 创建自定义Recipe
- 新建目录
poky/meta-myapp/recipes-app/myqtapp/,创建myqtapp_1.0.bb:SUMMARY = "My Qt5 Python Application" DESCRIPTION = "Custom Python Qt5 app for Raspberry Pi" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "file://main.py \ file://myapp.ui \ file://icons/ \ " S = "${WORKDIR}" DEPENDS = "python3 python3-pyqt5 python3-pyqt5-qtbase" RDEPENDS:${PN} = "python3 python3-pyqt5 python3-pyqt5-qtbase" do_install() { install -d ${D}/usr/share/myqtapp install -m 0755 ${S}/main.py ${D}/usr/share/myqtapp/ install -m 0644 ${S}/myapp.ui ${D}/usr/share/myqtapp/ cp -r ${S}/icons ${D}/usr/share/myqtapp/ install -d ${D}/usr/bin cat > ${D}/usr/bin/run_myapp <<EOF #!/bin/sh cd /usr/share/myqtapp && python3 main.py EOF chmod 0755 ${D}/usr/bin/run_myapp } SYSTEMD_SERVICE:${PN} = "myqtapp.service" FILES:${PN} += "/etc/systemd/system" do_install_append() { install -d ${D}/etc/systemd/system cat > ${D}/etc/systemd/system/myqtapp.service <<EOF [Unit] Description=My Qt5 Python App After=multi-user.target [Service] ExecStart=/usr/bin/run_myapp Restart=always User=root [Install] WantedBy=multi-user.target EOF } - 在同目录下创建
files/文件夹,放入你的代码、UI文件和图标
3. 配置系统镜像
- 在
local.conf中设置镜像类型和安装包:IMAGE_FSTYPES = "wic.bz2" IMAGE_INSTALL:append = " myqtapp" PACKAGECONFIG:append:pn-qtbase = "widgets gui opengl" PACKAGECONFIG:append:pn-python3 = "pyqt5"
4. 编译与烧写
- 执行编译:
bitbake core-image-sato # 如需轻量系统可用core-image-minimal - 解压并烧写镜像:
bunzip2 core-image-sato-raspberrypi4-64.wic.bz2 dd if=core-image-sato-raspberrypi4-64.wic of=/dev/sdX bs=4M status=progress
关键注意事项
- 若无需桌面环境,需确保Qt5依赖的底层图形库(如libxcb、libxkbcommon)被包含,否则程序无法启动
- 启用树莓派硬件加速:Buildroot勾选
BR2_PACKAGE_RPI_USERLAND,Yocto在local.conf添加MACHINE_FEATURES:append = " vc4graphics" - 若程序依赖其他Python库(如numpy),需在Buildroot的Python子选项中勾选,或在Yocto Recipe中添加对应
DEPENDS和RDEPENDS
内容的提问来源于stack exchange,提问作者Yasar
相关产品推荐
相关产品推荐

