You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编译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自定义包:
    1. 在Buildroot的package/目录下新建myqtapp文件夹
    2. 创建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))
      
    3. 回到menuconfig,在Target packages → Miscellaneous中勾选myqtapp

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
    endef
    
    同时在my_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:25:15