Как вызвать модуль Python в рецепте Yocto bitbake?

Я работаю над проектом Linux open-embedded (Yocto), и мне нужно использовать gRPC.

Ниже приведены мои рецепты, которые пытаются вызвать модуль python gRPC. (grpcio-tools)

В 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
 }

Но не удается найти модуль python во время битбейка. Ниже приведен код ошибки:  введите описание изображения здесь

Пожалуйста, научите меня вызывать модуль python во время битбейка. Большое тебе спасибо.


person Anson Tan    schedule 12.03.2021    source источник
comment
Привет, я бы добавил наследование pkgconfig python3native и изменил DEPENDS на python3-grpcio-tools-native и добавил RDEPENDS _ $ {PN} + = python3 python3-grpcio-tools   -  person Florian Berndl    schedule 15.03.2021
comment
отлично :) Поскольку мои предполагаемые изменения работают, я добавил их в качестве ответа   -  person Florian Berndl    schedule 15.03.2021


Ответы (2)


Если вы хотите использовать зависимость от хоста во время компиляции, вы всегда должны полагаться на собственную версию рецепта. Измените рецепт следующим образом:

inherit python3native    
DEPENDS += "python3-grpcio-tools-native"
RDEPENDS_${PN} += "python3 python3-grpcio-tools"
person Florian Berndl    schedule 15.03.2021
comment
Какова цель pkgconfig? И зачем устанавливать RDEPENDS _ $ {PN}, если модуль должен использоваться только во время сборки? - person Jan Schatz; 19.03.2021
comment
@JanSchatz Какой модуль? python3-grpcio-tools? Если модуль не нужен во время выполнения, его можно удалить из RDEPENDS _ $ {PN} .. Я не изучал подробно приложение - person Florian Berndl; 19.03.2021
comment
да я имел ввиду python3-grpcio-tools. Вопрос был о вызове модуля внутри рецепта. Вот почему меня раздражали RDEPENDS. - person Jan Schatz; 19.03.2021

Этот поток помог мне, поэтому я подумал, что поделюсь полным рецептом .bb, который работает для кросс-компиляции прото-файла в необходимые файлы для сервера gRPC Petalinux / Yocto Zeus с использованием python. Я не эксперт по битбейкам. Это устанавливает полученные файлы pb2 в / usr / bin и компилирует их с помощью python3-grpcio-tools для целевого устройства (которое может быть более старой / другой версией, чем та, которая у вас есть на вашей машине сборки). Файл 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 \
"
person Paul    schedule 11.06.2021