gpt4 book ai didi

python - 如何从本地 Python 项目的 Yocto 配方中的 requirements.txt 安装依赖项

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:10 24 4
gpt4 key购买 nike

我应该拥有的:

我希望我的 Yocto 项目为我的 Python 项目构建一个包,其中包含所有依赖项。该项目必须在生成的只读 SD 卡镜像上开箱即用。
它只是应该将所需版本中的所有要求安装到包中。

我没有运气的尝试:

在 do_install() 中调用 pip:

“找不到 pip/pip3”,即使它在 RDEPENDS 中。不管怎样,我真的更喜欢这种方式。

使用继承pypi:

尝试使用 inherit pypi 时,它还会尝试从 pypi 获取我的本地资源(我的 pyton 项目)。而且我总是将要求复制到食谱中。 这不是我喜欢的方式

在 pkg_postinst() 中调用 pip:

它尝试在第一次启动时安装模块但失败了,因为系统没有互联网连接并且它是一个只读系统。它必须开箱即用,无需在首次启动时安装。 做事到晚了

我要去的地方:

当 requirements.txt 发生变化时,无需更改食谱中的任何内容。

背景资料

我在 Linux 环境中使用 Yocto Rocko。
在主机系统中,没有安装 pip。我想在目标系统中运行从 RDEPENDS 安装的这个。

构建包(仅此配方):

bitbake myproject

构建整个 sdcard 镜像:

bitbake myProject-image-base

配方:

myproject.bb(相关行):

RDEPENDS_${PN} = "python3 python3-pip"

APP_SOURCES_DIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../../../../app-sources')}"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI = " \
file://${APP_SOURCES_DIR}/myProject \
...
"

inherit allarch # tried also with pypi and setuptools3 for the pypi way.

do_install() { # Line 116
install -d -m 0755 ${D}/myProject
cp -R --no-dereference --preserve=mode,links -v ${APP_SOURCES_DIR}/myProject/* ${D}/myProject/
pip3 install -r ${APP_SOURCES_DIR}/myProject/requirements.txt
# Tried also python ${APP_SOURCES_DIR}/myProject/setup.py install
}

# Tried also this, but it's no option because the data MUST be included in the Package:
# pkg_postinst_${PN}() {
# #!/bin/sh -e
# pip3 install -r /myProject/requirements.txt
# }

FILES_${PN} = "/myProject/*"

产生的错误:

预期将 requirements.txt 中列出的模块安装到 myProject 包中,以便 python 应用程序将直接在生成的只读 sdcard 图像上运行。

使用 pip,我得到:

| /*/tmp/work/*/myProject/0.1.0-r0/temp/run.do_install: 116: pip3: not found
| WARNING: exit code 127 from a shell command.
| ERROR: Function failed: do_install ...

使用pypi时:

404 Not Found
ERROR: myProject-0.1.0-r0 do_fetch: Fetcher failure for URL: 'https://files.pythonhosted.org/packages/source/m/myproject/myproject-0.1.0.tar.gz'. Unable to fetch URL from any source.

=> 但它不应该获取 myProject,因为它已经在本地并且无处可去。

有什么想法吗?在 requirements.txt 更改时无需更改配方即可获得随时可用的 sdcard 镜像的最佳方法是什么?

最佳答案

您应该使用 RDEPENDS_${PN} 来处理配方中应用程序的依赖项。

例如,假设您的 Python 应用程序需要 aws-iot-device-sdk-python 模块,您应该将其添加到配方中的 RDEPENDS。在你的情况下,它会是这样的:

RDEPENDS_${PN} = "python3 \
python3-pip \
python3-aws-iot-device-sdk-python \
"

这是显示 OpenEmbedded Layer 支持的 Python 模块的链接。 https://layers.openembedded.org/layerindex/branch/master/layer/meta-python/

如果您需要的模块不存在,您可能需要为这些模块创建配方。

关于python - 如何从本地 Python 项目的 Yocto 配方中的 requirements.txt 安装依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54080551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com