Files
poky/meta/recipes-devtools/python/python3-pip_22.0.3.bb
Richard Purdie 228c3b3562 python3-pip: Improve reproducibility
Pip installed wheels are not reproducible currently. The direct_url
files encode an installation path and the installed wheels compile
the python files at their location, not their final install location
which is incorrect.

To fix this, simply disable the direct_urls and pass the "root" to
the python compile function to strip that path out of the compiled
files.

(From OE-Core rev: 2c74d5346e7581949fbdebc4744c8317236221c3)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-02-25 15:07:50 +00:00

68 lines
2.0 KiB
BlitzBasic

SUMMARY = "The PyPA recommended tool for installing Python packages"
HOMEPAGE = "https://pypi.org/project/pip"
SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=63ec52baf95163b597008bb46db68030"
inherit pypi setuptools_build_meta
DEPENDS += "python3 python3-setuptools-native"
# To avoid a dependency loop; we bootstrap -native
DEPENDS:remove:class-native = "python3-pip-native"
DEPENDS:append:class-native = " unzip-native"
SRC_URI += "file://0001-change-shebang-to-python3.patch"
SRC_URI += "file://no_shebang_mangling.patch"
SRC_URI += "file://reproducible.patch"
SRC_URI[sha256sum] = "f29d589df8c8ab99c060e68ad294c4a9ed896624f6368c5349d70aa581b333d0"
PYPA_WHEEL ?= "${B}/dist/${PYPI_PACKAGE}-${PV}-*.whl"
do_install:class-native() {
# Bootstrap to prevent dependency loop in python3-pip-native
install -d ${D}${PYTHON_SITEPACKAGES_DIR}
unzip -d ${D}${PYTHON_SITEPACKAGES_DIR} ${PYPA_WHEEL} || \
bbfatal_log "Failed to unzip wheel: ${PYPA_WHEEL}. Check the logs."
# pip install would normally generate [console_scripts] in ${bindir}
install -d ${D}/${bindir}
# We will skip the ${bindir}/pip variant as we would just remove it in the do_install:append
cat << EOF >> ${D}/${bindir}/pip3 | tee ${D}/${bindir}/pip${PYTHON_BASEVERSION}
#!/bin/sh
'''exec' ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} "\$0" "\$@"
' '''
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
EOF
chmod 0755 ${D}${bindir}/pip3 ${D}${bindir}/pip${PYTHON_BASEVERSION}
}
do_install:append() {
# Install as pip3 and leave pip2 as default
if [ -e ${D}/${bindir}/pip ]; then
rm ${D}/${bindir}/pip
fi
}
RDEPENDS:${PN} = "\
python3-compile \
python3-io \
python3-html \
python3-json \
python3-multiprocessing \
python3-netserver \
python3-setuptools \
python3-unixadmin \
python3-xmlrpc \
python3-pickle \
"
BBCLASSEXTEND = "native nativesdk"