Как добавить больше модулей Python в мой проект yocto/openembedded?

Я хочу добавить больше модулей Python в мой проект yocto/openembedded, но я не уверен, как это сделать? Я хочу добавить колбу и ее зависимости.

5 ответов

Некоторые пакеты Python, имеющие соответствующие рецепты в метапапках, например, класс Enum:

meta-openembedded/meta-python/recipes-devtools/python/python-enum34_1.1.6.bb

К сожалению, многие полезные классы недоступны, но некоторые могут понадобиться для приложения на Python. привыкнуть к установке недостающих пакетов с помощью pip уже на загруженной платформе? но что, если целевой продукт не подключен к IP-сети? решение состоит в том, чтобы реализовать новый рецепт и добавить мета-слой платформы (как минимум). Пример рецепта для модуля keyboard полезно для перехвата клавиш / кнопок сенсорных событий:

  1. используйте веб-сайт PyPi, чтобы определить, доступен ли пакет:

https://pypi.org/project/keyboard/

  1. скачать архив можно на странице описания пакета:

https://github.com/boppreh/keyboard/archive/master.zip

  1. собрать некоторую полезную информацию, необходимую для заполнения нового рецепта:

    • РЕЗЮМЕ - можно получить на странице описания пакета
    • HOMEPAGE - URL проекта на github, bitbucket или sourceforge и т. Д.
    • ЛИЦЕНЗИЯ - проверить тип лицензии
    • LIC_FILES_CHKSUM путем выполнения md5sum на существующих LICENSE или же README или же PKG-INFO файл, расположенный в корне пакета (желательно)
    • SRC_URI [md5sum] - есть md5sum самого архива. он будет использоваться для автоматического обнаружения и загрузки архива на сервере pypi с помощью вспомогательного скрипта inherit pypi
    • PYPI_PACKAGE_EXT - если пакет не tar.gz требуют предоставить правильное расширение
  2. создать пропавший python-keyboard_0.13.1.bb рецепт:

`

SUMMARY = "Hook and simulate keyboard events on Windows and Linux"
HOMEPAGE = "https://github.com/boppreh/keyboard"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://PKG-INFO;md5=9bc8ba91101e2f378a65d36f675c88b7"

SRC_URI[md5sum] = "d4b90e53bbde888e7b7a5a95fe580a30"
SRC_URI += "file://add_missing_CHANGES_md.patch"

PYPI_PACKAGE = "keyboard"

PYPI_PACKAGE_EXT = "zip"

inherit pypi
inherit setuptools

BBCLASSEXTEND = "native nativesdk"

`

  1. пакет был исправлен добавлением

SRC_URI += "file://add_missing_CHANGES_md.patch"

директива к рецепту из-за отсутствия CHANGES.md файл, используемый setup.py скрипт для определения версии пакета (этот шаг не является обязательным). сам патч должен быть помещен в папку рядом с рецептом, соответствующим названию рецепта, но без версии:

python-keyboard

Это старый вопрос, но в настоящее время в 2020 году есть пакет Python под названием pipoe.

pipoe может генерировать .bb классы, соответствующие пакетам python для вас!

Применение:

$ pip3 install pipoe
$ pipoe -p requests
OR
$ pipoe -p requests --python python3

Теперь скопируйте сгенерированные файлы.bb на свой слой и используйте их.

https://pypi.org/project/pipoe/

Индекс OE-слоя на layer.openembedded.org перечисляет все известные слои и содержащиеся в них рецепты, поэтому при поиске должен появиться слой мета-питона, который вы можете добавить в свою сборку и использовать рецепты.

В своем рецепте Image вы можете добавить модуль Python, добавив его в IMAGE_INSTALL переменная:

IMAGE_INSTALL += "python-numpy"

Вы можете найти возможные модули, например, выполнив поиск по шаблону:

find -name *python*numpy*bb

в папке Yocto приносит:

./poky/meta/recipes-devtools/python/python-numpy_1.7.0.bb

Пипо у меня тоже не сработал, в итоге я сделал этот bash-скрипт. Кто-то еще может найти это полезным.

Вам нужно будет изменить это в моем сценарии ниже:

      local my_layers_dir="my/layers/directory"

Чтобы запустить этот скрипт:

      ./pypi.sh <modulename>
#example:
./pypi.sh humanfriendly   #this should generate the bb file for the humanfriendly python module

pypi.sh:

      #!/bin/bash
set -ex

function argstovars()
{
  for change in $@; do
      set -- `echo $change | tr '=' ' '`
      eval $1=$2
  done
}

function main(){
    
    local module=""
    argstovars $@
    local my_layers_dir="my/layers/directory"
    
    local url_files="https://pypi.org/project/$module/#files"
    mkdir -p /tmp/pypi
    rm -fr /tmp/pypi/*
    pushd /tmp/pypi
    
    wget $url_files
    local targz_url=$(cat index.html | grep https://files  | grep tar.gz | sed -r "s/<a href=\"(.*)\">/\1/g")
    wget $targz_url
    local targz_file=$(ls  | grep tar.gz)
    local md5=$(md5sum $targz_file)
    md5=${md5%% *}
    local sha256=$(sha256sum $targz_file)
    sha256=${sha256%% *}
    tar -xf $targz_file
    local module_with_version=$(echo "$targz_file" | sed -r "s/(.*)\.tar\.gz/\1/g")
    pushd $module_with_version
    local license_file=$(find . -name LICENSE*)
    local md5lic=$(md5sum $license_file)
    md5lic=${md5lic%% *}
    popd
    popd

    module_with_version="${module_with_version//-/_}"; echo $foo
    mkdir -p "$my_layers_dir/$module"
    pushd "$my_layers_dir/$module"
    
    echo "SUMMARY = \"This is a python module for $module\"
HOMEPAGE = \"https://pypi.org/project/$module/\"
LICENSE = \"MIT\"
LIC_FILES_CHKSUM = \"file://$license_file;md5=$md5lic\"

SRC_URI[md5sum] = \"$md5\"
SRC_URI[sha256sum] = \"$sha256\"

PYPI_PACKAGE = \"$module\"

inherit pypi setuptools3

RDEPENDS_${PN} += \" \
    python3-psutil \
\"
" > "${module_with_version}.bb"

    popd
}

time main module=$@
Другие вопросы по тегам