summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorRoss Burton <ross@burtonini.com>2022-03-14 14:39:23 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-03-16 08:48:09 +0000
commit00bc2e68f98e8a868dac26fe2f45954fbfdc2222 (patch)
treeffbfa554732b8e718fdd2728f708c19956e35b2e /meta
parentc4cfeb96a337cd7790d18cdbb101a130845efc02 (diff)
downloadpoky-00bc2e68f98e8a868dac26fe2f45954fbfdc2222.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. (From OE-Core rev: f780f6d920d8bbfb674d6066a8b899417decf8d2) Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/python_pep517.bbclass27
-rw-r--r--meta/recipes-devtools/python/python3-flit-core_3.7.1.bb2
-rw-r--r--meta/recipes-devtools/python/python3-pip_22.0.3.bb35
-rw-r--r--meta/recipes-devtools/python/python3-setuptools_59.5.0.bb12
-rw-r--r--meta/recipes-devtools/python/python3-wheel_0.37.1.bb26
5 files changed, 18 insertions, 84 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 @@
1# Common infrastructure for Python packages that use PEP-517 compliant packaging. 1# Common infrastructure for Python packages that use PEP-517 compliant packaging.
2# https://www.python.org/dev/peps/pep-0517/ 2# https://www.python.org/dev/peps/pep-0517/
3 3
4DEPENDS:append = " python3-pip-native" 4DEPENDS:append = " python3-installer-native"
5 5
6# Where to execute the build process from 6# Where to execute the build process from
7PEP517_SOURCE_PATH ?= "${S}" 7PEP517_SOURCE_PATH ?= "${S}"
@@ -11,19 +11,11 @@ PEP517_SOURCE_PATH ?= "${S}"
11# a recipe wants to install prebuilt wheels. 11# a recipe wants to install prebuilt wheels.
12PEP517_WHEEL_PATH ?= "${WORKDIR}/dist" 12PEP517_WHEEL_PATH ?= "${WORKDIR}/dist"
13 13
14PIP_INSTALL_ARGS = "\
15 -vvvv \
16 --ignore-installed \
17 --no-cache \
18 --no-deps \
19 --no-index \
20 --root=${D} \
21 --prefix=${prefix} \
22"
23
24PEP517_INSTALL_PYTHON = "python3" 14PEP517_INSTALL_PYTHON = "python3"
25PEP517_INSTALL_PYTHON:class-native = "nativepython3" 15PEP517_INSTALL_PYTHON:class-native = "nativepython3"
26 16
17INSTALL_WHEEL_COMPILE_BYTECODE ?= "--compile-bytecode=0"
18
27python_pep517_do_install () { 19python_pep517_do_install () {
28 COUNT=$(find ${PEP517_WHEEL_PATH} -name '*.whl' | wc -l) 20 COUNT=$(find ${PEP517_WHEEL_PATH} -name '*.whl' | wc -l)
29 if test $COUNT -eq 0; then 21 if test $COUNT -eq 0; then
@@ -32,18 +24,7 @@ python_pep517_do_install () {
32 bbfatal More than one wheel found in ${PEP517_WHEEL_PATH}, this should not happen 24 bbfatal More than one wheel found in ${PEP517_WHEEL_PATH}, this should not happen
33 fi 25 fi
34 26
35 nativepython3 -m pip install ${PIP_INSTALL_ARGS} ${PEP517_WHEEL_PATH}/*.whl 27 nativepython3 -m installer ${INSTALL_WHEEL_COMPILE_BYTECODE} --interpreter "${USRBINPATH}/env ${PEP517_INSTALL_PYTHON}" --destdir=${D} ${PEP517_WHEEL_PATH}/*.whl
36
37 cd ${D}
38 for i in ${D}${bindir}/* ${D}${sbindir}/*; do
39 if [ -f "$i" ]; then
40 sed -i -e "1s,#!.*nativepython3,#!${USRBINPATH}/env ${PEP517_INSTALL_PYTHON}," $i
41 sed -i -e "s:${PYTHON}:${USRBINPATH}/env\ ${PEP517_INSTALL_PYTHON}:g" $i
42 sed -i -e "s:${STAGING_BINDIR_NATIVE}:${bindir}:g" $i
43 # Not everything we find may be Python, so ignore errors
44 nativepython3 -mpy_compile $(realpath --relative-to=${D} $i) || true
45 fi
46 done
47} 28}
48 29
49# A manual do_install that just uses unzip for bootstrapping purposes. Callers should DEPEND on unzip-native. 30# A manual do_install that just uses unzip for bootstrapping purposes. Callers should DEPEND on unzip-native.
diff --git a/meta/recipes-devtools/python/python3-flit-core_3.7.1.bb b/meta/recipes-devtools/python/python3-flit-core_3.7.1.bb
index b12b8e42d7..dc815acf08 100644
--- a/meta/recipes-devtools/python/python3-flit-core_3.7.1.bb
+++ b/meta/recipes-devtools/python/python3-flit-core_3.7.1.bb
@@ -13,7 +13,7 @@ SRC_URI[sha256sum] = "3c9bd9c140515bfe62dd938c6610d10d6efb9e35cc647fc614fe5fb3a5
13inherit pypi flit_core 13inherit pypi flit_core
14 14
15# Need to install by hand as there's a dependency loop 15# Need to install by hand as there's a dependency loop
16DEPENDS:remove:class-native = " python3-pip-native" 16DEPENDS:remove:class-native = " python3-installer-native"
17DEPENDS:append:class-native = " unzip-native" 17DEPENDS:append:class-native = " unzip-native"
18 18
19# We need the full flit tarball 19# We need the full flit tarball
diff --git a/meta/recipes-devtools/python/python3-pip_22.0.3.bb b/meta/recipes-devtools/python/python3-pip_22.0.3.bb
index bfeeee789c..9ca8fbc1e5 100644
--- a/meta/recipes-devtools/python/python3-pip_22.0.3.bb
+++ b/meta/recipes-devtools/python/python3-pip_22.0.3.bb
@@ -6,43 +6,14 @@ LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=63ec52baf95163b597008bb46db68030"
6 6
7inherit pypi setuptools_build_meta 7inherit pypi setuptools_build_meta
8 8
9DEPENDS += "python3"
10
11# To avoid a dependency loop; we bootstrap -native
12DEPENDS:remove:class-native = "python3-pip-native"
13DEPENDS:append:class-native = " unzip-native"
14
15SRC_URI += "file://0001-change-shebang-to-python3.patch" 9SRC_URI += "file://0001-change-shebang-to-python3.patch"
16SRC_URI += "file://no_shebang_mangling.patch" 10SRC_URI += "file://no_shebang_mangling.patch"
17SRC_URI += "file://reproducible.patch" 11SRC_URI += "file://reproducible.patch"
18 12
19SRC_URI[sha256sum] = "f29d589df8c8ab99c060e68ad294c4a9ed896624f6368c5349d70aa581b333d0" 13SRC_URI[sha256sum] = "f29d589df8c8ab99c060e68ad294c4a9ed896624f6368c5349d70aa581b333d0"
20 14
21do_install:class-native() {
22 python_pep517_do_bootstrap_install
23
24 # pip install would normally generate [console_scripts] in ${bindir}
25 install -d ${D}/${bindir}
26 # We will skip the ${bindir}/pip variant as we would just remove it in the do_install:append
27 cat << EOF >> ${D}/${bindir}/pip3 | tee ${D}/${bindir}/pip${PYTHON_BASEVERSION}
28#!/bin/sh
29'''exec' ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} "\$0" "\$@"
30' '''
31# -*- coding: utf-8 -*-
32import re
33import sys
34from pip._internal.cli.main import main
35if __name__ == '__main__':
36 sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
37 sys.exit(main())
38EOF
39 chmod 0755 ${D}${bindir}/pip3 ${D}${bindir}/pip${PYTHON_BASEVERSION}
40}
41
42do_install:append() { 15do_install:append() {
43 if [ -e ${D}/${bindir}/pip ]; then 16 rm -f ${D}/${bindir}/pip
44 rm ${D}/${bindir}/pip
45 fi
46} 17}
47 18
48RDEPENDS:${PN} = "\ 19RDEPENDS:${PN} = "\
@@ -59,3 +30,7 @@ RDEPENDS:${PN} = "\
59" 30"
60 31
61BBCLASSEXTEND = "native nativesdk" 32BBCLASSEXTEND = "native nativesdk"
33
34# This used to use the bootstrap install which didn't compile. Until we bump the
35# tmpdir version we can't compile the native otherwise the sysroot unpack fails
36INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
diff --git a/meta/recipes-devtools/python/python3-setuptools_59.5.0.bb b/meta/recipes-devtools/python/python3-setuptools_59.5.0.bb
index d93972b9a0..35bec19e33 100644
--- a/meta/recipes-devtools/python/python3-setuptools_59.5.0.bb
+++ b/meta/recipes-devtools/python/python3-setuptools_59.5.0.bb
@@ -17,14 +17,6 @@ SRC_URI[sha256sum] = "d144f85102f999444d06f9c0e8c737fd0194f10f2f7e5fdb77573f6e2f
17 17
18DEPENDS += "${PYTHON_PN}" 18DEPENDS += "${PYTHON_PN}"
19 19
20# Avoid dependency loop; we bootstrap -native
21DEPENDS:remove:class-native = "python3-pip-native python3-setuptools-native"
22DEPENDS:append:class-native = " unzip-native"
23
24do_install:class-native() {
25 python_pep517_do_bootstrap_install
26}
27
28RDEPENDS:${PN} = "\ 20RDEPENDS:${PN} = "\
29 ${PYTHON_PN}-2to3 \ 21 ${PYTHON_PN}-2to3 \
30 ${PYTHON_PN}-compile \ 22 ${PYTHON_PN}-compile \
@@ -59,3 +51,7 @@ RDEPENDS:${PYTHON_PN}-pkg-resources = "\
59 ${PYTHON_PN}-plistlib \ 51 ${PYTHON_PN}-plistlib \
60 ${PYTHON_PN}-pprint \ 52 ${PYTHON_PN}-pprint \
61" 53"
54
55# This used to use the bootstrap install which didn't compile. Until we bump the
56# tmpdir version we can't compile the native otherwise the sysroot unpack fails
57INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
diff --git a/meta/recipes-devtools/python/python3-wheel_0.37.1.bb b/meta/recipes-devtools/python/python3-wheel_0.37.1.bb
index a339e65824..efd6c2f968 100644
--- a/meta/recipes-devtools/python/python3-wheel_0.37.1.bb
+++ b/meta/recipes-devtools/python/python3-wheel_0.37.1.bb
@@ -10,26 +10,8 @@ inherit flit_core pypi
10 10
11SRC_URI += " file://0001-Backport-pyproject.toml-from-flit-backend-branch.patch" 11SRC_URI += " file://0001-Backport-pyproject.toml-from-flit-backend-branch.patch"
12 12
13DEPENDS:remove:class-native = "python3-pip-native"
14
15do_install:class-native () {
16 python_pep517_do_bootstrap_install
17
18 # pip install would normally generate [project.scripts] in ${bindir}
19 install -d ${D}/${bindir}
20 cat << EOF >> ${D}/${bindir}/wheel
21#!/bin/sh
22'''exec' ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} "\$0" "\$@"
23' '''
24# -*- coding: utf-8 -*-
25import re
26import sys
27from wheel.cli import main
28if __name__ == '__main__':
29 sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
30 sys.exit(main())
31EOF
32 chmod 0755 ${D}${bindir}/wheel
33}
34
35BBCLASSEXTEND = "native nativesdk" 13BBCLASSEXTEND = "native nativesdk"
14
15# This used to use the bootstrap install which didn't compile. Until we bump the
16# tmpdir version we can't compile the native otherwise the sysroot unpack fails
17INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"