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

#grpc #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  = " python3-grpcio-tools"
 do_compile(){
   python3 -m grpc_tools.protoc -I ${S} --python_out=. --grpc_python_out=. ${S}/tests/rcu_ser.proto
 }
 

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

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

Комментарии:

1. Привет, я бы добавил «наследовать pkgconfig python3native» и изменил БЫ ЕГО на «python3-grpcio-инструменты-родной» и добавил RDEPENDS_${PN} = «python3 python3-grpcio-инструменты»

2. отлично 🙂 Поскольку мои изменения sugessted работают, я добавил это в качестве ответа

Ответ №1:

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

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

Комментарии:

1. Какова цель pkgconfig? И зачем устанавливать RDEPENDS_${PN}, если модуль следует использовать только во время сборки?

2. @JanSchatz Какой модуль? python3-grpcio-инструменты? Если модуль не нужен во время выполнения, его можно удалить из RDEPENDS_${PN}.. Я не изучал приложение подробно

3. да, я имел в виду python3-grpcio-инструменты. Вопрос заключался в вызове модуля внутри рецепта. Вот почему RDEPENDS раздражали меня.

Ответ №2:

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