diff options
author | Tim Orling <ticotimo@gmail.com> | 2022-02-22 11:16:31 -0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-02-25 15:06:46 +0000 |
commit | 32a61afde0e7d8df6634b88525d8c3e8c6c3516e (patch) | |
tree | 8e33b6b7f9cc5899f3da7f4622b786981c9c1ad3 | |
parent | 764d0c2e079b3511afe03deadf3ec922e41b89aa (diff) | |
download | openembedded-core-contrib-32a61afde0e7d8df6634b88525d8c3e8c6c3516e.tar.gz |
pip_install_wheel.bbclass: add helper class
Provide a helper class to use pip to install wheels built by either
bdist_wheel or a PEP-517 backend.
Set pip install arguments via PIP_INSTALL_ARGS, which can be overriden
by recipes.
Pass --root and --prefix to ensure that pip installs things into the
proper place in sysroot.
By passing --no-deps and --no-index we avoid finicky dependency
checking (pip expects wheels in its cache) and avoid trying to fetch
wheels from pypi.org. This is basically the same behavior we have now,
the dependencies should be declared in the recipe.
Also pass --force-reinstall to make sure built wheels are always installed
so that FILES gets properly populated.
Pass --no-cache to avoid a (harmless) warning about the pip cache in
$HOME be avoiding use of cache. We do not likely want wheels cached
anyway,
pip install changes the python interpreter in scripts installed in
${bindir}, e.g. to #!/usr/bin/nativepython3, correct the behavior after
install to #!/usr/bin/env python3.
[YOCTO #14638]
Signed-off-by: Tim Orling <tim.orling@konsulko.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes/pip_install_wheel.bbclass | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/meta/classes/pip_install_wheel.bbclass b/meta/classes/pip_install_wheel.bbclass new file mode 100644 index 0000000000..70f47d6f79 --- /dev/null +++ b/meta/classes/pip_install_wheel.bbclass @@ -0,0 +1,39 @@ +DEPENDS:append = " python3-pip-native" + +PIP_INSTALL_PACKAGE ?= "${PYPI_PACKAGE}" +PIP_INSTALL_DIST_PATH ?= "${B}/dist" +PYPA_WHEEL ??= "${PIP_INSTALL_DIST_PATH}/${PIP_INSTALL_PACKAGE}-${PV}-*.whl" + +PIP_INSTALL_ARGS ?= "\ + -vvvv \ + --force-reinstall \ + --no-cache \ + --no-deps \ + --no-index \ + --root=${D} \ + --prefix=${prefix} \ +" + +pip_install_wheel_do_install:prepend () { + install -d ${D}${PYTHON_SITEPACKAGES_DIR} +} + +export PYPA_WHEEL + +PIP_INSTALL_PYTHON = "python3" +PIP_INSTALL_PYTHON:class-native = "nativepython3" + +pip_install_wheel_do_install () { + nativepython3 -m pip install ${PIP_INSTALL_ARGS} ${PYPA_WHEEL} || + bbfatal_log "Failed to pip install wheel. Check the logs." + + for i in ${D}${bindir}/* ${D}${sbindir}/*; do + if [ -f "$i" ]; then + sed -i -e "1s,#!.*nativepython3,#!${USRBINPATH}/env ${PIP_INSTALL_PYTHON}," $i + sed -i -e "s:${PYTHON}:${USRBINPATH}/env\ ${PIP_INSTALL_PYTHON}:g" $i + sed -i -e "s:${STAGING_BINDIR_NATIVE}:${bindir}:g" $i + fi + done +} + +EXPORT_FUNCTIONS do_install |