我应该有什么:
我希望我的 Yocto 项目为我的 Python 项目构建一个包含所有依赖项的包。该项目必须在生成的只读 sdcard 图像上运行。
它只是应该将所需版本中的所有要求安装到包中。
我没有运气的尝试:
调用pipdo_install():
“找不到 pip/pip3”,即使它在 RDEPENDS 中。 无论如何,我真的很喜欢这种方式。
与inherit pypi:
尝试使用 时inherit pypi,它还会尝试从 pypi 获取我的本地资源(我的 pyton 项目)。而且我总是将要求复制到配方中。这不是我的首选方式。
pip在 pkg_postinst() 中调用:
它尝试在第一次启动时安装模块并失败,因为系统没有互联网连接并且它是一个只读系统。它必须在第一次启动时无需安装即可开箱即用。它的东西来晚了。
我会去哪里:
当 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图像的最佳方法是什么?
慕田峪4524236
慕少森
相关分类