如何在 Yocto bitbake 配方中调用 python 模块?
How to invoke a python module in Yocto bitbake recipe?
我正在开发一个 linux 开放式嵌入式项目 (Yocto),我需要使用 gRPC。
以下是我尝试调用 gRPC python 模块的方法。 (grpcio-工具)
在local.conf
TOOLCHAIN_HOST_TASK_append = " nativesdk-python3-grpcio-tools"
TOOLCHAIN_TARGET_TASK_append = " python3-grpcio-tools"
然后是我的 .bb 文件,我尝试将其添加为 Depends。
DEPENDS += " python3-grpcio-tools"
do_compile(){
python3 -m grpc_tools.protoc -I ${S} --python_out=. --grpc_python_out=. ${S}/tests/rcu_ser.proto
}
但是它在 bitbake 期间找不到 python 模块。下面是失败代码:
请教我如何在 bitbake 期间调用 python 模块。
非常感谢。
如果你想在编译期间使用对主机的依赖,你必须始终依赖配方的本地版本。按如下方式修改您的食谱:
inherit python3native
DEPENDS += "python3-grpcio-tools-native"
RDEPENDS_${PN} += "python3 python3-grpcio-tools"
这个帖子对我有帮助,所以我想我会分享一个完整的 .bb 配方,它可以使用 python 将原型文件交叉编译为 Petalinux / Yocto Zeus gRPC 服务器所需的文件。我不是 bitbake 专家。这会将生成的 pb2 文件安装在 /usr/bin 中,并使用 python3-grpcio-tools 为目标设备编译它们(可能是 older/different 版本,而不是您在构建机器上的版本) . proto 文件包括 protobuf 定义和 rpc 定义,因此生成了 _pb2_grpc.py 文件。
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 \
"
我正在开发一个 linux 开放式嵌入式项目 (Yocto),我需要使用 gRPC。
以下是我尝试调用 gRPC python 模块的方法。 (grpcio-工具)
在local.conf
TOOLCHAIN_HOST_TASK_append = " nativesdk-python3-grpcio-tools"
TOOLCHAIN_TARGET_TASK_append = " python3-grpcio-tools"
然后是我的 .bb 文件,我尝试将其添加为 Depends。
DEPENDS += " python3-grpcio-tools"
do_compile(){
python3 -m grpc_tools.protoc -I ${S} --python_out=. --grpc_python_out=. ${S}/tests/rcu_ser.proto
}
但是它在 bitbake 期间找不到 python 模块。下面是失败代码:
请教我如何在 bitbake 期间调用 python 模块。 非常感谢。
如果你想在编译期间使用对主机的依赖,你必须始终依赖配方的本地版本。按如下方式修改您的食谱:
inherit python3native
DEPENDS += "python3-grpcio-tools-native"
RDEPENDS_${PN} += "python3 python3-grpcio-tools"
这个帖子对我有帮助,所以我想我会分享一个完整的 .bb 配方,它可以使用 python 将原型文件交叉编译为 Petalinux / Yocto Zeus gRPC 服务器所需的文件。我不是 bitbake 专家。这会将生成的 pb2 文件安装在 /usr/bin 中,并使用 python3-grpcio-tools 为目标设备编译它们(可能是 older/different 版本,而不是您在构建机器上的版本) . proto 文件包括 protobuf 定义和 rpc 定义,因此生成了 _pb2_grpc.py 文件。
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 \
"