我有一个简单的python应用程序:
包装要求:
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
文件,但不确定如何处理
答案 0 :(得分:6)
由于influxdb-python
和pynmea2
不能作为标准python食谱使用,因此我首先使用devtool
为它们创建食谱。
使用devtool
添加influxdb-python
devtool add influxdb-python https://github.com/influxdata/influxdb-python/archive/v5.2.0.tar.gz
使用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"
,因此所有主要功能都可以在目标上使用。
我遵循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 shell进行检查
# 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"
的{{1}}中包括这些食谱尚未测试。
但是我想我将像YoctoCookBook Repository for hello-world
所述,将我的应用简单地添加到我的bitbake -k your-image-name
层。
meta
确实是救世主。我尝试手动添加运行时部门,每次将其部署在板上时,总是会丢失一些依赖项。但是添加${PYTHON_PN}-modules
解决了实例中所有丢失的deps问题。
我不确定何时使用modules
,但我认为大多数python应用程序都依赖于基本的DEPENDS_${PN}
,因此我添加了它们。
不是专业专家,但这只是我最近两周的发现。 Yocto中缺少适当的Python示例。希望这对某人有帮助。