简体   繁体   中英

How to invoke a python module in Yocto bitbake recipe?

I am working on a linux open-embedded project (Yocto), and I need to use gRPC.

Below are my recipes that try to invoke the gRPC python module. (grpcio-tools)

In local.conf

TOOLCHAIN_HOST_TASK_append = " nativesdk-python3-grpcio-tools"
TOOLCHAIN_TARGET_TASK_append = " python3-grpcio-tools"

Then is my.bb file, I try to add it as Depends.

 DEPENDS += " python3-grpcio-tools"
 do_compile(){
   python3 -m grpc_tools.protoc -I ${S} --python_out=. --grpc_python_out=. ${S}/tests/rcu_ser.proto
 }

But it fails to find the python module during bitbake. Below is the failure code: 在此处输入图像描述

Please teach me how to invoke the python module during bitbake. Thank you very much.

If you want to use dependency on the host during compile time you must always depend to native version of a recipe. Modify your recipe as following:

inherit python3native    
DEPENDS += "python3-grpcio-tools-native"
RDEPENDS_${PN} += "python3 python3-grpcio-tools"

This thread helped me so I thought I would share a complete.bb recipe that's working for cross-compiling a proto file into the necessary files for a Petalinux / Yocto Zeus gRPC server using python. I'm no bitbake expert. This installs the resulting pb2 files in /usr/bin and compiles them using python3-grpcio-tools for the target device (which may be an older/different version than what you have on your build machine). The proto file includes protobuf definitions as well as rpc definitions, hence the generated _pb2_grpc.py file.

SUMMARY = "My summary."
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI = " \
  file://my_proto.proto \
"

inherit python3native

RDEPENDS_${PN} = " \
    python3-core \
    python3-protobuf \
    python3-grpcio \
"

DEPENDS += " \
    python3-grpcio-tools-native \
"

do_compile() {
  python3 -m grpc.tools.protoc -I${WORKDIR} --python_out=${WORKDIR}/. --grpc_python_out=${WORKDIR}/. ${WORKDIR}/my_proto.proto
}

do_install() {
  install -Dm 0755 ${WORKDIR}/my_proto_pb2.py ${D}/${bindir}/my_proto_pb2.py
  install -Dm 0755 ${WORKDIR}/my_proto_pb2_grpc.py ${D}/${bindir}/my_proto_pb2_grpc.py
}

FILES_${PN} = " \
  ${bindir}/my_proto_pb2.py \
  ${bindir}/my_proto_pb2_grpc.py \
"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM