Напишите рецепт в yocto для приложения на python - PullRequest
0 голосов
/ 20 мая 2018

У меня есть простое приложение на python, которое:

  1. получает информацию с GPS
  2. анализирует информацию
  3. сохраняет ее в InfluxDB

Требования к пакету:

certifi==2018.4.16
chardet==3.0.4
idna==2.6 
influxdb==5.0.0
pynmea2==1.12.0 
pyserial==3.4
python-dateutil==2.7.3
pytz==2018.4
requests==2.18.4
six==1.11.0
urllib3==1.22          

Выше написано с помощью:

pip3 install pynmea2 pyserial influxdb

В OpenEmbedded Layers Index я уже нашел pyserialпакет для Python3 .Что подразумевается на доске, которую мне просто нужно сделать pip3 install pynmea2 influxdb.

Как вы продолжаете писать рецепт моего приложения с учетом всех вышеупомянутых зависимостей в пипсах?

Нетлюбые учебники, которые я нашел для написания рецептов для приложений на Python.(Напротив, у приложений Node есть некоторые указания на вики-странице для yocto .

После проверки некоторых рецептов в слое meta-python я нашел несколько файлов .inc, но не уверенкак это сделать

1 Ответ

0 голосов
/ 04 октября 2018

Создание рецептов для недоступных приложений Python

Поскольку influxdb-python и pynmea2 недоступны как стандартные рецепты Python, я начал с создания рецептов для них с использованием devtool.

* 1007.* Шаги
  1. используйте devtool для добавления influxdb-python

    devtool add influxdb-python https://github.com/influxdata/influxdb-python/archive/v5.2.0.tar.gz

  2. используйте devtool длядобавьте pynmea2

    devtool add pynmea2 https://github.com/Knio/pynmea2/archive/1.7.1.tar.gz

Вышеупомянутые шаги создают папку workspace в вашем $BUILD_DIR и создают автоматически сгенерированные рецепты для репозиториев..

Отредактируйте рецепты

devtool edit-recipe influxdb-python

добавьте или отметьте DEPEND_${PN} и RDEPENDS_${PN} к своим рецептам соответственно.Я добавил все requirements.txt для influxdb-python к RDEPENDS_${PN}, а именно

RDEPEND_${PN} += "${PYTHON_PN}-modules ${PYTHON_PN}-requests ${PYTHON_PN}-dateutil ${PYTHON_PN}-pytz ${PYTHON_PN}-six"

ПРИМЕЧАНИЕ : я не добавил pandas или numpy поскольку они не относятся к моей заявке.

Я также добавил DEPENDS_${PN} = "${PYTHON_PN}-modules.

ПРИМЕЧАНИЕ : выполните то же самое для pynmea2, но поскольку у него нет requirements.txt, я добавил RDEPENDS_${PN} = "${PYTHON_PN}-modules", поэтому все основные вещи доступны на цели.

Структура рецепта

GitHub Gist для рецептов

Я следовал структуре папки meta-python, где каждый из рецептов состоит из:

  • recipe.inc
  • recipe_version_number.bb

В influxdb_python.inc сохраните весь материал, сгенерированный из devtool, а именно

# Recipe created by recipetool
# This is the basis of a recipe and may need further editing in order to be fully functional.
# (Feel free to remove these comments when editing.)
#
# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is
# your responsibility to verify that the values are complete and correct.
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=046523829184aac3703a4c60c0ae2104"

HOMEPAGE = "https://github.com/influxdb/influxdb-python"
SUMMARY = "InfluxDB client"

SRC_URI = "https://github.com/influxdata/influxdb-python/archive/v${PV}.tar.gz"
SRC_URI[md5sum] = "105d88695151e241523b31dd1375096e"
SRC_URI[sha256sum] = "620de85bcca5207b06ec1565884b6d10b4be01d579a78e08b1e922f453fdac05"

DEPENDS_${PN} = "${PYTHON_PN}-modules"
RDEPENDS_${PN} = "${PYTHON_PN}-modules ${PYTHON_PN}-requests ${PYTHON_PN}-dateutil ${PYTHON_PN}-pytz ${PYTHON_PN}-six"

В influxdb_python_5.2.0.bb я добавил следующие строки:

inherit setuptools3 pypi                              
require influxdb-python.inc

ПРИМЕЧАНИЕ : я добавил setuptools3, поскольку хочу, чтобы мое приложение запускалось на python3.5.Для python2.7 используйте setuptools.

Аналогично, я сделал то же самое для pynmea2.inc:

# Recipe created by recipetool
# This is the basis of a recipe and may need further editing in order to be fully functional.
# (Feel free to remove these comments when editing.)
#
# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is
# your responsibility to verify that the values are complete and correct.
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=bb5e173bc54080cb25079199959ba6b6"

HOMEPAGE = "https://github.com/Knio/pynmea2"
SUMMARY = "Python library for the NMEA 0183 protcol"

SRC_URI = "https://github.com/Knio/pynmea2/archive/${PV}.tar.gz"
SRC_URI[md5sum] = "a90baf61f4e676bef76099e4bd7c0581"
SRC_URI[sha256sum] = "8f8f68623bd2d5dab7f04a9c31813a3f4aa15467db0373cbce6b9b0ae44ca48e"

#DEPENDS_${PN} = "${PYTHON_PN}-datetime ${PYTHON_PN}-threading ${PYTHON_PN}-io"
DEPENDS_${PN} = "${PYTHON_PN}-modules"
# WARNING: the following rdepends are determined through basic analysis of the
# python sources, and might not be 100% accurate.
RDEPENDS_${PN} = "${PYTHON_PN}-modules"

Для pynmea2_1.7.1.bb:

inherit setuptools3 pypi
require pynmea2.inc

Выпечка рецептов

Вы можете проверить их с помощью bitbake -k influxdb-python и bitbake -k pynmea2 или devtool build influxdb-python и devtool build pynmea2

Если у вас нет ошибок, вы можете развернуть их на целииспользуя:

devtool deploy-target influxdb-python user@machineIP:dest_folder

Проверки

Вы можете проверить, запустив оболочку python

# python3 

 >> import influxdb-python
 >> import pyserial

, если при импорте выдается ошибка отсутствия отсутствующих модулей, то это успех !!

Завершающие шаги

  • Вы можете отменить развертывание модулей: devtool undeploy-target recipe_name [address of target]

  • отправить рецепты на свой пользовательский мета-слой devtool finish recipe_name ../meta-custom

ПРИМЕЧАНИЕ : если вы используете krogoth или ниже, вам придется вручную переместить свои рецепты на мета-слой

  • Теперь включите эти рецепты в свои conf/local.conf с IMAGE_INSTALL_append = " influxdb-python pynmea2" и bitbake -k your-image-name

Пользовательское приложение

Еще не тестировалось.

Но я думаю, я просто добавлю свой апp Как упоминалось в YoctoCookBook Repository для hello-world с моим слоем meta.

NUGGETS

  • ${PYTHON_PN}-modules действительно спаситель.Я пытался вручную добавить deps во время выполнения и каждый раз, когда я развертывал его на плате, всегда отсутствовали некоторые зависимости.Но добавление modules решило все недостающие проблемы deps в экземпляре.

  • Я не уверен, когда использовать DEPENDS_${PN}, но я предполагаю, что большинство приложений на python зависят от базового python-modules поэтому я добавил их.

  • НЕ ЭКСПЕРТ ЙОКТО но это только мои выводы за последние 2 недели.В Yocto не хватает подходящих примеров для Python.надеюсь, это кому-нибудь поможет.

...