Balena环境下树莓派4部署librealsense时构建文件缺失、无法导入pyrealsense2问题
问题原因与修复方案
直接触发报错的原因
librealsense/build/python目录不存在,本质是Python绑定模块根本没有被编译,CMake直接跳过了该模块的构建流程,后续拷贝、导入操作自然都会失败。
具体遗漏的配置/错误点
编译命令逻辑错误
你在CMake完成后执行的命令为make all -j4 && sudo make all,第二个make all无任何作用,编译完成后必须执行make install,才能将编译产物(包括Python绑定的.so文件)安装到系统路径,否则即使编译成功,库文件也只会散落在build目录中,不会生成可直接调用的Python模块。Python版本不兼容导致绑定被跳过
你使用的balenalib/raspberrypi3-ubuntu:xenial-build是Ubuntu 16.04镜像,自带Python3版本为3.5;且你未指定librealsense版本,默认拉取的最新版librealsense最低要求Python3.6+,CMake检测到版本不符合要求时,会直接跳过Python绑定编译。CMake未显式绑定Python环境
仅开启-DBUILD_PYTHON_BINDINGS=true不足以触发Python模块编译,旧系统下CMake如果未检测到Python解释器、头文件、库的路径,会直接跳过该模块构建,不会生成build/python目录。不必要的sudo调用
balena基础镜像默认以root用户运行构建,不需要sudo提权,且部分balena镜像未预装sudo,多余的sudo命令可能直接执行失败。依赖缺失
librealsense的Python绑定依赖pybind11,你当前的依赖安装列表未包含该组件,会进一步导致Python绑定编译失败。镜像适配问题
树莓派4为armv8架构,raspberrypi3系列镜像针对armv7编译,建议更换为raspberrypi4对应的官方镜像。
修正后的Dockerfile参考
# 更换为适配树莓派4的Ubuntu 20.04镜像,自带Python3.8,满足新版librealsense要求 FROM balenalib/raspberrypi4-ubuntu:focal-build # 移除所有sudo,默认root用户直接执行操作 RUN apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y RUN apt-get install -y python3 \ python3-dev \ python3-pip \ python3-setuptools \ python3-pybind11 # 新增pybind11编译依赖 RUN apt-get install -y git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev cmake libglfw3-dev build-essential # 可指定稳定的librealsense版本,避免新版要求过高 RUN git clone --depth 1 --branch v2.53.1 https://github.com/IntelRealSense/librealsense.git RUN cd librealsense/ && ./scripts/setup_udev_rules.sh RUN mkdir build &&\ cd build &&\ # 显式指定Python3路径,强制CMake识别Python环境 cmake /librealsense/ \ -DBUILD_PYTHON_BINDINGS=true \ -DBUILD_EXAMPLES=true \ -DBUILD_GRAPHICAL_EXAMPLES=false \ -DCMAKE_BUILD_TYPE=Release \ -DPython3_EXECUTABLE=/usr/bin/python3 \ -DPython3_INCLUDE_DIR=/usr/include/python3.8 \ -DPython3_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.8.so &&\ make all -j4 &&\ make install # 修正为install目标,将编译产物安装到系统路径 # make install已将pyrealsense2安装到Python默认site-packages,无需手动拷贝build目录 ENV INITSYSTEM on WORKDIR /usr/src/app COPY ./app/ /usr/src/app/ CMD ["python3", "/usr/src/app/test_server.py"]
特殊场景说明
如果必须使用Ubuntu 16.04(xenial)镜像,需要将librealsense切换到v2.45.0及更早的版本(该版本支持Python3.5),同时将CMake中的Python3路径参数替换为对应Python3.5的路径即可。
内容的提问来源于stack exchange,提问作者ddiddi
相关产品推荐
相关产品推荐

