在yocto中为python应用程序写一个食谱

时间:2018-05-20 15:27:52

标签: python-3.x embedded-linux yocto

我有一个简单的python应用程序:

  1. 从GPS获取信息
  2. 解析信息
  3. 将其存储在InfluxDB中
  4. 包装要求:

    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我已找到 Python3 pyserial包。这意味着我可能需要执行pip3 install pynmea2 influxdb

    如何在编写我的应用程序配方时考虑到上述所有pip依赖关系?

    我没有找到为python应用程序编写配方的任何教程。 (相反,Node应用程序确实对wiki page for yocto提供了一些指导。

    检查meta-python图层中的某些食谱后,我发现了一些.inc文件,但不确定如何处理

1 个答案:

答案 0 :(得分:6)

为不可用的python应用程序创建食谱

由于influxdb-pythonpynmea2不能作为标准python食谱使用,因此我首先使用devtool为它们创建食谱。

步骤

  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,并为存储库创建了自动生成的配方。

  1. 编辑食谱

    devtool edit-recipe influxdb-python

  2. 向您的食谱中添加或检查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"

    注意:我尚未添加pandasnumpy,因为它们与我的申请无关。

  3. 我还添加了DEPENDS_${PN} = "${PYTHON_PN}-modules

  

注意:对pynmea2执行相同操作,但是由于它没有任何requirements.txt,因此我添加了RDEPENDS_${PN} = "${PYTHON_PN}-modules",因此所有主要功能都可以在目标上使用。

食谱结构

GitHub Gist for Recipes

我遵循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-pythonbitbake -k pynmea2 或搭配 devtool build influxdb-pythondevtool build pynmea2

如果没有错误,则可以使用以下方法将其部署在目标上:

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

检查

您可以通过触发python shell进行检查

# python3 

 >> import influxdb-python
 >> import pyserial

如果导入没有抛出缺少的模块错误,则说明成功!

最后一步

  • 您可以取消部署模块:devtool undeploy-target recipe_name [address of target]

  • 将食谱发送到您的自定义元层devtool finish recipe_name ../meta-custom

  

注意:如果您使用的是krogoth或更低的版本,则必须将配方手动移动到元层

  • 现在将conf/local.confIMAGE_INSTALL_append = " influxdb-python pynmea2"的{​​{1}}中包括这些食谱

自定义应用

  

尚未测试。

但是我想我将像YoctoCookBook Repository for hello-world所述,将我的应用简单地添加到我的bitbake -k your-image-name层。

小点心

  • meta确实是救世主。我尝试手动添加运行时部门,每次将其部署在板上时,总是会丢失一些依赖项。但是添加${PYTHON_PN}-modules解决了实例中所有丢失的deps问题。

  • 我不确定何时使用modules,但我认为大多数python应用程序都依赖于基本的DEPENDS_${PN},因此我添加了它们。

  • 不是专业专家,但这只是我最近两周的发现。 Yocto中缺少适当的Python示例。希望这对某人有帮助。