Как добавить больше модулей 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
полезно для перехвата клавиш / кнопок сенсорных событий:
- используйте веб-сайт PyPi, чтобы определить, доступен ли пакет:
https://pypi.org/project/keyboard/
- скачать архив можно на странице описания пакета:
https://github.com/boppreh/keyboard/archive/master.zip
собрать некоторую полезную информацию, необходимую для заполнения нового рецепта:
- РЕЗЮМЕ - можно получить на странице описания пакета
- 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
требуют предоставить правильное расширение
создать пропавший
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"
`
- пакет был исправлен добавлением
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 на свой слой и используйте их.
Индекс 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=$@