Что у меня должно быть:
Я хочу, чтобы мой проект Yocto создал пакет для моего проекта Python со всеми зависимостями внутри. Проект должен работать из коробки на полученном образе SDCAD только для чтения.
Он просто должен установить все требования требуемой версии к пакету.
Что я попробовал без удачи:
Вызов pip
в do_install ():
"pip / pip3 не найден", даже в RDEPENDS.
Во всяком случае, я действительно предпочитаю этот путь.
С inherit pypi
:
При попытке с inherit pypi
он также пытается получить мои локальные источники (мой проект Pyton) от Pypi. И я всегда должен копировать требования к рецепту. Это не мой любимый способ .
Вызов pip
в pkg_postinst ():
Он пытается установить модули при первом запуске и завершается неудачно, потому что система не подключена к Интернету и доступна только для чтения. Он должен работать из коробки без установки при первой загрузке. Делает свои вещи до поздна .
Где я обойду:
Не должно быть необходимости что-либо менять в рецептах, когда что-то меняется в require.txt.
Справочная информация
Я работаю с Yocto Rocko в среде Linux.
В Хостсистеме пипс не установлен. Я хочу запустить этот, установленный из 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/*"
Результирующие ошибки:
Предполагается установить перечисленные модули из needs.txt в пакет myProject, чтобы приложение python работало непосредственно с полученным образом SDCard только для чтения.
С пипсами я получаю:
| /*/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, поскольку он уже локальный и нигде не удаленный.
Есть идеи? Каков наилучший способ получения готового к использованию образа SDCard без необходимости менять рецепты при изменении require.txt?