diff options
author | Ross Burton <ross@burtonini.com> | 2022-03-14 14:39:23 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-03-16 08:48:04 +0000 |
commit | f780f6d920d8bbfb674d6066a8b899417decf8d2 (patch) | |
tree | 10296314399b9f73ad02692f43776ed2ff0a2110 /meta/classes | |
parent | bf09c0bd99e4defbc259775b4a2e3fcce09bde17 (diff) | |
download | openembedded-core-contrib-f780f6d920d8bbfb674d6066a8b899417decf8d2.tar.gz |
python_pep517: use installer instead of pip
Instead of battling pip to install a wheel, use installer. Installer
does one thing, so it's faster and easier to work with.
This means setuptools, pip, and wheel are no longer part of the
bootstrap phase, so they can be built normally. To avoid sysroot file
conflicts these three recipes can't install .pyc files to the native
sysroot.
We currently patch pypa/installer to allow us to override the interpreter
used, which means we can drop the interpreter seding.
We don't need to recompile any Python which is found in $bindir as
Python doesn't actually load those files.
Across a build of oe-core, the only differences between using pip and
installer are:
- the .dist-info/RECORD files are ordered differently
- the .dist-info/REQUESTED and INSTALLER files are not created
- the hashbang in native scripts is "/usr/bin/env nativepython" instead
of pointing directly at the native sysroot python3.
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/python_pep517.bbclass | 27 |
1 files changed, 4 insertions, 23 deletions
diff --git a/meta/classes/python_pep517.bbclass b/meta/classes/python_pep517.bbclass index 756333bcf2..ac7c1e44c6 100644 --- a/meta/classes/python_pep517.bbclass +++ b/meta/classes/python_pep517.bbclass @@ -1,7 +1,7 @@ # Common infrastructure for Python packages that use PEP-517 compliant packaging. # https://www.python.org/dev/peps/pep-0517/ -DEPENDS:append = " python3-pip-native" +DEPENDS:append = " python3-installer-native" # Where to execute the build process from PEP517_SOURCE_PATH ?= "${S}" @@ -11,19 +11,11 @@ PEP517_SOURCE_PATH ?= "${S}" # a recipe wants to install prebuilt wheels. PEP517_WHEEL_PATH ?= "${WORKDIR}/dist" -PIP_INSTALL_ARGS = "\ - -vvvv \ - --ignore-installed \ - --no-cache \ - --no-deps \ - --no-index \ - --root=${D} \ - --prefix=${prefix} \ -" - PEP517_INSTALL_PYTHON = "python3" PEP517_INSTALL_PYTHON:class-native = "nativepython3" +INSTALL_WHEEL_COMPILE_BYTECODE ?= "--compile-bytecode=0" + python_pep517_do_install () { COUNT=$(find ${PEP517_WHEEL_PATH} -name '*.whl' | wc -l) if test $COUNT -eq 0; then @@ -32,18 +24,7 @@ python_pep517_do_install () { bbfatal More than one wheel found in ${PEP517_WHEEL_PATH}, this should not happen fi - nativepython3 -m pip install ${PIP_INSTALL_ARGS} ${PEP517_WHEEL_PATH}/*.whl - - cd ${D} - for i in ${D}${bindir}/* ${D}${sbindir}/*; do - if [ -f "$i" ]; then - sed -i -e "1s,#!.*nativepython3,#!${USRBINPATH}/env ${PEP517_INSTALL_PYTHON}," $i - sed -i -e "s:${PYTHON}:${USRBINPATH}/env\ ${PEP517_INSTALL_PYTHON}:g" $i - sed -i -e "s:${STAGING_BINDIR_NATIVE}:${bindir}:g" $i - # Not everything we find may be Python, so ignore errors - nativepython3 -mpy_compile $(realpath --relative-to=${D} $i) || true - fi - done + nativepython3 -m installer ${INSTALL_WHEEL_COMPILE_BYTECODE} --interpreter "${USRBINPATH}/env ${PEP517_INSTALL_PYTHON}" --destdir=${D} ${PEP517_WHEEL_PATH}/*.whl } # A manual do_install that just uses unzip for bootstrapping purposes. Callers should DEPEND on unzip-native. |