我希望能够向我的yocto/openembedded项目中添加更多的Python模块,但我不确定如何操作。 我想要添加Flask及其依赖项。
我希望能够向我的yocto/openembedded项目中添加更多的Python模块,但我不确定如何操作。 我想要添加Flask及其依赖项。
一些Python包在元文件夹中有相应的配方,例如Enum类:
meta-openembedded/meta-python/recipes-devtools/python/python-enum34_1.1.6.bb
不幸的是,许多有用的类不可用,但某些类可能对Python应用程序很有用。已经在启动的平台上使用pip
安装缺失的软件包了吗?但是如果目标产品没有IP网络连接怎么办?解决方法是实现新的配方并添加到平台元层(至少)。示例是用于拦截键/按钮触摸事件的模块keyboard
的配方:
https://pypi.org/project/keyboard/
https://github.com/boppreh/keyboard/archive/master.zip
收集一些有用的信息,以填写新配方:
LICENSE
或README
或PKG-INFO
文件上执行md5sum
来验证许可证文件的一致性md5sum
。它将与支持脚本inherit pypi
的帮助自动在PyPI服务器上发现和下载归档文件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年有一个名为pipoe
的Python包。
pipoe
可以为您生成与 Python 包对应的 .bb
类!
用法:
$ pip3 install pipoe
$ pipoe -p requests
OR
$ pipoe -p requests --python python3
现在将生成的.bb文件复制到您的层中并使用它们。
$ pipoe -p v4l2 --python python3
输出: 无法翻译许可证: GPLv2
。通过手动设置许可证解决了问题: $ pipoe -d GPLv3 -p v4l2 --python python3
。 - bacpipoe --version
。然后,我不得不在bb文件中将一些冒号(:)改为下划线(_)。 - undefinedIMAGE_INSTALL
变量来添加它:IMAGE_INSTALL += "python-numpy"
您可以通过使用通配符搜索可能的模块来查找示例:
find -name *python*numpy*bb
./poky/meta/recipes-devtools/python/python-numpy_1.7.0.bb
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=$@
BBCLASSEXTEND
会更好。 - Ahmad Karim