如何将更多的Python模块添加到我的Yocto/OpenEmbedded项目中?

14

我希望能够向我的yocto/openembedded项目中添加更多的Python模块,但我不确定如何操作。 我想要添加Flask及其依赖项。

5个回答

21

一些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. 收集一些有用的信息,以填写新配方:

    • SUMMARY - 可从软件包说明页面获取
    • HOMEPAGE - Github或Bitbucket或Sourceforge等上的项目URL
    • LICENSE - 验证许可证类型
    • LIC_FILES_CHKSUM - 通过在位于软件包根目录中的现有LICENSEREADMEPKG-INFO文件上执行md5sum来验证许可证文件的一致性
    • SRC_URI[md5sum] - 是归档文件本身的md5sum。它将与支持脚本inherit pypi的帮助自动在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"

该软件包已通过添加下述指令进行了补丁:

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

由于缺失CHANGES.md文件,setup.py脚本无法识别软件包版本,因此需要对配方进行修补(此步骤是可选的)。补丁本身必须放置在与配方匹配但没有版本号的文件夹内:

python-keyboard


非常感谢您的回答!运行得非常完美。这应该被接受为正确的答案,如果能解释一下BBCLASSEXTEND会更好。 - Ahmad Karim

20

这个问题很老了,但是目前在2020年有一个名为pipoe的Python包。

pipoe 可以为您生成与 Python 包对应的 .bb 类!

用法:

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

现在将生成的.bb文件复制到您的层中并使用它们。

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


这对我没用; $ pipoe -p v4l2 --python python3 输出: 无法翻译许可证: GPLv2。通过手动设置许可证解决了问题: $ pipoe -d GPLv3 -p v4l2 --python python3 - bac
2023年,对我来说,pipoe在初始状态下无法正常工作,一些pypi json的变化迫使我去查看更新的pwicks86 fork of pipoe。我需要在gatesgarth中使用plumbum,但是旧版本的yocto不支持最新的toml版本,所以我想使用带有旧的setup.py的较旧的plumbum来运行pipoe --version。然后,我不得不在bb文件中将一些冒号(:)改为下划线(_)。 - undefined

3
在layers.openembedded.org网站上的OE层索引列出了所有已知的层以及它们包含的配方,因此在搜索时应该会找到meta-python层,您可以将其添加到构建中并使用其中的配方。

1
在您的Image recipe中,您可以通过将Python模块添加到IMAGE_INSTALL变量来添加它:
IMAGE_INSTALL += "python-numpy"

您可以通过使用通配符搜索可能的模块来查找示例:

find -name *python*numpy*bb

在Yocto文件夹中,带来了以下内容:
./poky/meta/recipes-devtools/python/python-numpy_1.7.0.bb

0

pipoe 对我也没用,最后我写了这个 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=$@

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接