From patchwork Fri Nov 13 14:30:34 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 103993 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.12530.1794580243860259390 for ; Fri, 13 Nov 2026 06:30:44 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@arm.com header.s=foss header.b=Ir14Zq3W; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id F02281516 for ; Fri, 13 Nov 2026 06:30:39 -0800 (PST) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 909E03F673 for ; Fri, 13 Nov 2026 06:30:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1794580242; bh=U70mj18+FJAJ8al1KJYoHNNKOJVBfdB8AXShsni+MBo=; h=From:To:Subject:Date:From; b=Ir14Zq3WEp3BOy9QaMKznL4VI4ANS2Akjoxrq1YmUD2Nk2fsi8B9nlFVAbcDV+6mB 1DMtWGIyAoehQKLqmMN2Yhx8uZ/y4WrrdLOr8g9zaxW+ZJUitHy3S1IqODQSwiQUlK IxDpcEbQ/HphBD/o06os/YPqxUsiwL6evYlAQc6U= From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH v3 1/5] python3: remove obsolete reformatting of _sysconfigdata*.py Date: Fri, 13 Nov 2026 14:30:34 +0000 Message-ID: <20261113143038.1651404-1-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-ARM-No-Footer: NoDisclaimer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Fri, 13 Nov 2026 14:30:47 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/250176 The python3 recipe currently reformats the _sysconfigdata*.py files after they are modified to remove build paths, as the files may be wrapped differently based on the length of strings[1]. However, this wrapping was due to the use of pprint.pprint(), which since Python 3.13 is no longer used to generate the sysconfigdata[2]. As such, remove the reformatting as it is no longer needed. [1] oe-core ec8a2b310d5 ("python3: Reformat sysconfig") [2] python 5ecedbd2669 ("gh-106789: avoid importing pprint from sysconfig (#106790)") Signed-off-by: Ross Burton --- .../python/python3/reformat_sysconfig.py | 21 ------------------- .../python/python3_3.14.10.bb | 8 +------ 2 files changed, 1 insertion(+), 28 deletions(-) delete mode 100644 meta/recipes-devtools/python/python3/reformat_sysconfig.py diff --git a/meta/recipes-devtools/python/python3/reformat_sysconfig.py b/meta/recipes-devtools/python/python3/reformat_sysconfig.py deleted file mode 100644 index 5e2b12879d9..00000000000 --- a/meta/recipes-devtools/python/python3/reformat_sysconfig.py +++ /dev/null @@ -1,21 +0,0 @@ -#! /usr/bin/env python3 -# -# SPDX-License-Identifier: MIT -# -# Copyright 2019 by Garmin Ltd. or its subsidiaries -# -# A script to reformat python sysconfig - -import sys -import pprint -l = {} -g = {} -with open(sys.argv[1], 'r') as f: - exec(f.read(), g, l) - -with open(sys.argv[1], 'w') as f: - for k in sorted(l.keys()): - f.write('%s = ' % k) - pprint.pprint(l[k], stream=f, width=1) - f.write('\n') - diff --git a/meta/recipes-devtools/python/python3_3.14.10.bb b/meta/recipes-devtools/python/python3_3.14.10.bb index c50c4d4babc..28e67330d1a 100644 --- a/meta/recipes-devtools/python/python3_3.14.10.bb +++ b/meta/recipes-devtools/python/python3_3.14.10.bb @@ -12,7 +12,6 @@ SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \ file://get_module_deps3.py \ file://python3-manifest.json \ file://check_build_completeness.py \ - file://reformat_sysconfig.py \ file://0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch \ file://0001-test_locale.py-correct-the-test-output-format.patch \ file://makerace.patch \ @@ -214,9 +213,6 @@ do_install:append:class-native() { } do_install:append() { - for c in ${D}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py; do - python3 ${UNPACKDIR}/reformat_sysconfig.py $c - done rm -f ${D}${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sysconfigdata*.cpython* mkdir -p ${D}${libdir}/python-sysconfigdata @@ -389,10 +385,8 @@ py_package_preprocess () { ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfig_vars*.json \ ${PKGD}/${bindir}/python${PYTHON_MAJMIN}-config - # Reformat and recompile _sysconfigdata after modifying it so that it remains - # reproducible + # Recompile _sysconfigdata after modifying it for c in ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py; do - python3 ${UNPACKDIR}/reformat_sysconfig.py $c python3 -mcompileall $c -s ${PKGD} -p / done From patchwork Fri Nov 13 14:30:35 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 103994 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.12533.1794580244232110155 for ; Fri, 13 Nov 2026 06:30:44 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@arm.com header.s=foss header.b=acAVpiC8; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B2490152B for ; Fri, 13 Nov 2026 06:30:40 -0800 (PST) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 49F2D3F673 for ; Fri, 13 Nov 2026 06:30:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1794580243; bh=wLT6Ffltr1m2QRCRax4CqoP9h4etUOAbmeaB2evqc/U=; h=From:To:Subject:Date:In-Reply-To:References:From; b=acAVpiC8yOdkvs1SoZNpqWJTldVvJrFpdleOgj0WeHibStFrqGmupfyUYplKXyJcU 6ZijSUo/1yTiRJdcJRI2QXuubJ7Q3tfZ7vEZW2VosgcknJXLTaXjdjr70IGoppvVb0 ZPIdVNOhPgn8WK5hx+KruPVA25DPOJbABn46LtFA= From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH v3 2/5] python3: don't copy from UNPACKDIR to WORKDIR Date: Fri, 13 Nov 2026 14:30:35 +0000 Message-ID: <20261113143038.1651404-2-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261113143038.1651404-1-ross.burton@arm.com> References: <20261113143038.1651404-1-ross.burton@arm.com> MIME-Version: 1.0 X-ARM-No-Footer: NoDisclaimer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Fri, 13 Nov 2026 14:30:48 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/250177 There's no need to copy files from UNPACKDIR to WORKDIR, we can just do the work in UNPACKDIR. Signed-off-by: Ross Burton --- meta/recipes-devtools/python/python3_3.14.10.bb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/meta/recipes-devtools/python/python3_3.14.10.bb b/meta/recipes-devtools/python/python3_3.14.10.bb index 28e67330d1a..d8ccd3c2cc2 100644 --- a/meta/recipes-devtools/python/python3_3.14.10.bb +++ b/meta/recipes-devtools/python/python3_3.14.10.bb @@ -492,11 +492,8 @@ do_create_manifest() { # e.g. BerkeleyDB is an optional build dependency so it may or may not # be present, we must ensure it is. - cp ${UNPACKDIR}/create_manifest3.py ${WORKDIR} - cp ${UNPACKDIR}/python3-manifest.json ${WORKDIR} - cp ${UNPACKDIR}/get_module_deps3.py ${WORKDIR} - cd ${WORKDIR} # This needs to be executed by python-native and NOT by HOST's python + cd ${UNPACKDIR} nativepython3 create_manifest3.py ${PYTHON_MAJMIN} cp python3-manifest.json.new ${THISDIR}/python3/python3-manifest.json } From patchwork Fri Nov 13 14:30:36 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 103995 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.12535.1794580244877714797 for ; Fri, 13 Nov 2026 06:30:45 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@arm.com header.s=foss header.b=as0Z5h12; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 68A031516 for ; Fri, 13 Nov 2026 06:30:41 -0800 (PST) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 0DCC93F673 for ; Fri, 13 Nov 2026 06:30:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1794580244; bh=cVWiwUJB/gqT0qk2iJ4Lgc5Tm3NkfmikIGPcje6+/5o=; h=From:To:Subject:Date:In-Reply-To:References:From; b=as0Z5h12+niKUCykO69hNuA5qyBVqGNM91VtBIjMcjowSswLpJ/3L9atF+6/npoQB cf7K5u6AWuNP2JvuvAySmYVFkkWM/FAh/zxexkhQr6uIzIOWV0OfUPGyBP9/ufemnH 00yPmSH0FIbEb9IBsZxE38rKEYUdhuJCYzBryn4A= From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH v3 3/5] python3: no need to use an OrderedDict Date: Fri, 13 Nov 2026 14:30:36 +0000 Message-ID: <20261113143038.1651404-3-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261113143038.1651404-1-ross.burton@arm.com> References: <20261113143038.1651404-1-ross.burton@arm.com> MIME-Version: 1.0 X-ARM-No-Footer: NoDisclaimer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Fri, 13 Nov 2026 14:30:48 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/250178 As of Python 3.7, standard dictionaries are sorted by insertion order. As this stable order was the only reason for using OrderedDict, we can switch to using a normal dictionary. Signed-off-by: Ross Burton --- meta/recipes-devtools/python/python3/create_manifest3.py | 7 +++---- meta/recipes-devtools/python/python3_3.14.10.bb | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/meta/recipes-devtools/python/python3/create_manifest3.py b/meta/recipes-devtools/python/python3/create_manifest3.py index 288d5ede3a2..6d3108e46f7 100644 --- a/meta/recipes-devtools/python/python3/create_manifest3.py +++ b/meta/recipes-devtools/python/python3/create_manifest3.py @@ -43,7 +43,6 @@ import sys import subprocess import json import os -import collections if '-d' in sys.argv: debugFlag = '-d' @@ -60,7 +59,7 @@ for p in sys.path: nativelibfolder = p[:p.find(pivot)+len(pivot)] # Empty dict to hold the whole manifest -new_manifest = collections.OrderedDict() +new_manifest = {} # Check for repeated files, folders and wildcards allfiles = [] @@ -103,7 +102,7 @@ with open('python3-manifest.json') as manifest: manifest.seek(0) comments = manifest.read(json_start) manifest_str = manifest.read() - old_manifest = json.loads(manifest_str, object_pairs_hook=collections.OrderedDict) + old_manifest = json.loads(manifest_str) # # First pass to get core-package functionality, because we base everything on the fact that core is actually working @@ -219,7 +218,7 @@ for pypkg in old_manifest: for pypkg in old_manifest: # Use an empty dict as data structure to hold data for each package and fill it up - new_manifest[pypkg] = collections.OrderedDict() + new_manifest[pypkg] = {} new_manifest[pypkg]['summary'] = old_manifest[pypkg]['summary'] new_manifest[pypkg]['rdepends'] = [] new_manifest[pypkg]['files'] = [] diff --git a/meta/recipes-devtools/python/python3_3.14.10.bb b/meta/recipes-devtools/python/python3_3.14.10.bb index d8ccd3c2cc2..9c45f8e0c67 100644 --- a/meta/recipes-devtools/python/python3_3.14.10.bb +++ b/meta/recipes-devtools/python/python3_3.14.10.bb @@ -404,7 +404,7 @@ py_package_preprocess () { INCLUDE_PYCS ?= "1" python(){ - import collections, json + import json filename = os.path.join(d.getVar('THISDIR'), 'python3', 'python3-manifest.json') # This python changes the datastore based on the contents of a file, so mark @@ -416,7 +416,7 @@ python(){ json_start = manifest_str.find('# EOC') + 6 manifest_file.seek(json_start) manifest_str = manifest_file.read() - python_manifest = json.loads(manifest_str, object_pairs_hook=collections.OrderedDict) + python_manifest = json.loads(manifest_str) # First set RPROVIDES for -native case # Hardcoded since it cant be python3-native-foo, should be python3-foo-native From patchwork Fri Nov 13 14:30:37 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 103996 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.12537.1794580245594436809 for ; Fri, 13 Nov 2026 06:30:45 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@arm.com header.s=foss header.b=K0NPzaXX; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 24CA3152B for ; Fri, 13 Nov 2026 06:30:42 -0800 (PST) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id BA8D33F673 for ; Fri, 13 Nov 2026 06:30:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1794580245; bh=y3rA00Ps1b8ctsrHwkvM2F+mPfeE91ifVgLMWULPcbY=; h=From:To:Subject:Date:In-Reply-To:References:From; b=K0NPzaXXnLucQ8s9DrYStPP/aJPXVDcgEZCqgSPR08cS0b/620VVwV9ezZV1uFd6D VF8lFJT000BLJHzShAzTrcqbT4mQ+3zmepwOtShgFkB7iaxcEiP4aOUIrziptdg5B+ reQeEbrgzyTMqlbTiFrLUbdsZn6zVQV4vztRuadU= From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH v3 4/5] python3: add support for skipping dependencies when building the manifest Date: Fri, 13 Nov 2026 14:30:37 +0000 Message-ID: <20261113143038.1651404-4-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261113143038.1651404-1-ross.burton@arm.com> References: <20261113143038.1651404-1-ross.burton@arm.com> MIME-Version: 1.0 X-ARM-No-Footer: NoDisclaimer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Fri, 13 Nov 2026 14:30:48 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/250179 The manifest generation works by importing modules and seeing what other modules also get included. This means the manifest is maximal, for example shutil tries to import all of the compression modules to determine what compression types are available. Add a "skip_depends" element to the manifest so we can mark up specific dependencies that should be ignored when generating the manifest. Signed-off-by: Ross Burton --- .../python/python3/create_manifest3.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/meta/recipes-devtools/python/python3/create_manifest3.py b/meta/recipes-devtools/python/python3/create_manifest3.py index 6d3108e46f7..9ce04fdd2aa 100644 --- a/meta/recipes-devtools/python/python3/create_manifest3.py +++ b/meta/recipes-devtools/python/python3/create_manifest3.py @@ -93,6 +93,14 @@ def print_indent(msg, offset): msg = ' ' * offset + l print(msg) +def is_dependency_skipped(manifest, package, dependency): + """ + Check to see if this dependency should be ignored by matching substrings + from the optional skip_depends element in the manifest. + """ + skiplist = manifest.get('skip_depends', {}).get(package, []) + return any((skip in dependency for skip in skiplist)) + # Read existing JSON manifest with open('python3-manifest.json') as manifest: @@ -121,6 +129,8 @@ print_indent('Getting dependencies for package: core', 0) output = subprocess.check_output([sys.executable, 'get_module_deps3.py', 'python-core-package', '%s' % debugFlag]).decode('utf8') for coredep in output.split(): + if is_dependency_skipped(old_manifest['core'], "core", coredep): + continue coredep = coredep.replace(pyversion,'${PYTHON_MAJMIN}') if isCached(coredep): if coredep not in old_manifest['core']['cached']: @@ -172,6 +182,8 @@ for filedep in old_manifest['core']['files']: for pymodule_dep in output.split(): + if is_dependency_skipped(old_manifest['core'], pymodule, pymodule_dep): + continue pymodule_dep = pymodule_dep.replace(pyversion,'${PYTHON_MAJMIN}') if isCached(pymodule_dep): @@ -221,6 +233,8 @@ for pypkg in old_manifest: new_manifest[pypkg] = {} new_manifest[pypkg]['summary'] = old_manifest[pypkg]['summary'] new_manifest[pypkg]['rdepends'] = [] + if "skip_depends" in old_manifest[pypkg]: + new_manifest[pypkg]['skip_depends'] = old_manifest[pypkg]['skip_depends'] new_manifest[pypkg]['files'] = [] new_manifest[pypkg]['cached'] = old_manifest[pypkg]['cached'] @@ -298,6 +312,8 @@ for pypkg in old_manifest: reportRDEPS = [] for pymodule_dep in output.split(): + if is_dependency_skipped(new_manifest[pypkg], pymodule, pymodule_dep): + continue # Warning: This first part is ugly # One of the dependencies that was found, could be inside of one of the folders included by another package From patchwork Fri Nov 13 14:30:38 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 103992 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.12533.1794580246262496718 for ; Fri, 13 Nov 2026 06:30:46 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@arm.com header.s=foss header.b=XodCVdrC; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D17621516 for ; Fri, 13 Nov 2026 06:30:42 -0800 (PST) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 741303F8C6 for ; Fri, 13 Nov 2026 06:30:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1794580245; bh=dRqjrlkIugelNY4J/Rc+qI8IBt2D5EJqd42zCVTDLLQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=XodCVdrCpSBWyv9M/J08mM+UZgT3ZBYfe2+Avu3qb5YvH3AdY/SiL3Fr9ck71M+IU qySZlyl/kSlv8ylhUoUNakainjgA9rlg1RNS230X2640IQDrERMw/t+h9tZru05a0v 4GKoWxe6z1YVpqoAxfK6iQHE8HrayPCAiPY6bI8w= From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH v3 5/5] python3: refresh manifest Date: Fri, 13 Nov 2026 14:30:38 +0000 Message-ID: <20261113143038.1651404-5-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261113143038.1651404-1-ross.burton@arm.com> References: <20261113143038.1651404-1-ross.burton@arm.com> MIME-Version: 1.0 X-ARM-No-Footer: NoDisclaimer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Fri, 13 Nov 2026 14:30:47 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/250180 Add some dependency skips: - the core imports in zipimport (->compression), but as importing of .zip files is relatively niche skip this dependency. - shutil imports all of compression to determine what methods are available. Skip this dependency, packages which use shutil.make_archive() can depend on -compression. Notable, ensurepip needs to unpack a wheel. Consolidate the compression files into -compression instead of being spread across multiple packages. Put _interpreters.so and _remote_debugging.so into the appropriate packages, remove some previously installed libraries that are now part of the interpreter, and refresh the dependencies. Signed-off-by: Ross Burton --- .../python/python3/python3-manifest.json | 78 ++++++++++++++----- .../python/python3_3.14.10.bb | 1 + 2 files changed, 58 insertions(+), 21 deletions(-) diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json index 50fdf5d0eae..0c91745e675 100644 --- a/meta/recipes-devtools/python/python3/python3-manifest.json +++ b/meta/recipes-devtools/python/python3/python3-manifest.json @@ -107,6 +107,7 @@ "summary": "Python Asynchronous I/O", "rdepends": [ "core", + "debugger", "io", "logging", "netclient", @@ -165,20 +166,39 @@ "core" ], "files": [ + "${libdir}/python${PYTHON_MAJMIN}/bz2.py", + "${libdir}/python${PYTHON_MAJMIN}/compression", "${libdir}/python${PYTHON_MAJMIN}/gzip.py", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_bz2.*.so", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_lzma.*.so", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_zstd.*.so", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/zlib.*.so", + "${libdir}/python${PYTHON_MAJMIN}/lzma.py", "${libdir}/python${PYTHON_MAJMIN}/tarfile.py", - "${libdir}/python${PYTHON_MAJMIN}/zipfile/", - "${libdir}/python${PYTHON_MAJMIN}/compression/", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_zstd.*.so" + "${libdir}/python${PYTHON_MAJMIN}/zipfile" ], "cached": [ + "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bz2.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gzip.*.pyc", + "${libdir}/python${PYTHON_MAJMIN}/__pycache__/lzma.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc" ] }, "core": { "summary": "Python interpreter and core modules", - "rdepends": ["compression"], + "rdepends": [], + "skip_depends": { + "core": [ + "zipimport" + ], + "shutil": [ + "compression", + "bz2", + "lzma", + "zlib", + "zstd" + ] + }, "files": [ "${bindir}/python${PYTHON_MAJMIN}", "${bindir}/python${PYTHON_MAJMIN}.real", @@ -193,22 +213,20 @@ "${libdir}/python${PYTHON_MAJMIN}/_bootlocale.py", "${libdir}/python${PYTHON_MAJMIN}/_collections_abc.py", "${libdir}/python${PYTHON_MAJMIN}/_colorize.py", - "${libdir}/python${PYTHON_MAJMIN}/_compression.py", "${libdir}/python${PYTHON_MAJMIN}/_markupbase.py", "${libdir}/python${PYTHON_MAJMIN}/_opcode_metadata.py", "${libdir}/python${PYTHON_MAJMIN}/_py_warnings.py", "${libdir}/python${PYTHON_MAJMIN}/_pyrepl", "${libdir}/python${PYTHON_MAJMIN}/_pyrepl/pager.py", "${libdir}/python${PYTHON_MAJMIN}/_sitebuiltins.py", - "${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py", "${libdir}/python${PYTHON_MAJMIN}/_sysconfig_vars*.json", + "${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py", "${libdir}/python${PYTHON_MAJMIN}/_weakrefset.py", "${libdir}/python${PYTHON_MAJMIN}/abc.py", "${libdir}/python${PYTHON_MAJMIN}/annotationlib.py", "${libdir}/python${PYTHON_MAJMIN}/argparse.py", "${libdir}/python${PYTHON_MAJMIN}/ast.py", "${libdir}/python${PYTHON_MAJMIN}/bisect.py", - "${libdir}/python${PYTHON_MAJMIN}/bz2.py", "${libdir}/python${PYTHON_MAJMIN}/code.py", "${libdir}/python${PYTHON_MAJMIN}/codecs.py", "${libdir}/python${PYTHON_MAJMIN}/codeop.py", @@ -250,10 +268,9 @@ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/time.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/xreadlines.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_bisect.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_bz2.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_csv.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_heapq.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_lzma.*.so", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_interpreters.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_opcode.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_posixsubprocess.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_struct.*.so", @@ -269,10 +286,8 @@ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/time.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/unicodedata.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/xreadlines.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/zlib.*.so", "${libdir}/python${PYTHON_MAJMIN}/linecache.py", "${libdir}/python${PYTHON_MAJMIN}/locale.py", - "${libdir}/python${PYTHON_MAJMIN}/lzma.py", "${libdir}/python${PYTHON_MAJMIN}/new.py", "${libdir}/python${PYTHON_MAJMIN}/ntpath.py", "${libdir}/python${PYTHON_MAJMIN}/opcode.py", @@ -283,6 +298,8 @@ "${libdir}/python${PYTHON_MAJMIN}/pathlib.py", "${libdir}/python${PYTHON_MAJMIN}/pathlib/_abc.py", "${libdir}/python${PYTHON_MAJMIN}/pathlib/_local.py", + "${libdir}/python${PYTHON_MAJMIN}/pathlib/_os.py", + "${libdir}/python${PYTHON_MAJMIN}/pathlib/types.py", "${libdir}/python${PYTHON_MAJMIN}/pkgutil.py", "${libdir}/python${PYTHON_MAJMIN}/platform.py", "${libdir}/python${PYTHON_MAJMIN}/posixpath.py", @@ -341,7 +358,6 @@ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/argparse.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ast.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bisect.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bz2.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/code.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codecs.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codeop.*.pyc", @@ -367,7 +383,6 @@ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/keyword.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/linecache.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/locale.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/lzma.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ntpath.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/opcode.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/__pycache__/operator.*.pyc", @@ -420,6 +435,8 @@ "${libdir}/python${PYTHON_MAJMIN}/pathlib/__pycache__", "${libdir}/python${PYTHON_MAJMIN}/pathlib/__pycache__/_abc.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/pathlib/__pycache__/_local.*.pyc", + "${libdir}/python${PYTHON_MAJMIN}/pathlib/__pycache__/_os.*.pyc", + "${libdir}/python${PYTHON_MAJMIN}/pathlib/__pycache__/types.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__", "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_casefix.*.pyc", "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_compiler.*.pyc", @@ -451,6 +468,7 @@ "ctypes": { "summary": "Python C types support", "rdepends": [ + "compression", "core", "io", "math" @@ -482,8 +500,7 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/_strptime.py", "${libdir}/python${PYTHON_MAJMIN}/calendar.py", - "${libdir}/python${PYTHON_MAJMIN}/datetime.py", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_datetime.*.so" + "${libdir}/python${PYTHON_MAJMIN}/datetime.py" ], "cached": [ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_strptime.*.pyc", @@ -505,13 +522,22 @@ "debugger": { "summary": "Python debugger", "rdepends": [ + "asyncio", + "compression", "core", + "io", + "json", + "logging", + "math", + "netclient", + "numbers", "pprint", "shell", "stringold" ], "files": [ "${libdir}/python${PYTHON_MAJMIN}/bdb.py", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_remote_debugging.*.so", "${libdir}/python${PYTHON_MAJMIN}/pdb.py" ], "cached": [ @@ -554,9 +580,17 @@ "doctest": { "summary": "Python framework for running examples in docstrings", "rdepends": [ + "asyncio", + "compression", "core", "debugger", "difflib", + "io", + "json", + "logging", + "math", + "netclient", + "numbers", "pprint", "shell", "stringold", @@ -603,9 +637,7 @@ "rdepends": [ "core" ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/fcntl.*.so" - ], + "files": [], "cached": [] }, "gdbm": { @@ -654,6 +686,7 @@ "io": { "summary": "Python low-level I/O", "rdepends": [ + "compression", "core", "math", "netclient" @@ -818,10 +851,12 @@ "multiprocessing": { "summary": "Python multiprocessing support", "rdepends": [ + "compression", "core", "crypt", "ctypes", "io", + "json", "math", "mmap", "netclient", @@ -853,6 +888,7 @@ "${libdir}/python${PYTHON_MAJMIN}/hmac.py", "${libdir}/python${PYTHON_MAJMIN}/http", "${libdir}/python${PYTHON_MAJMIN}/http/__pycache__", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_hmac.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_uuid.*.so", "${libdir}/python${PYTHON_MAJMIN}/mimetypes.py", "${libdir}/python${PYTHON_MAJMIN}/poplib.py", @@ -895,7 +931,6 @@ "${libdir}/python${PYTHON_MAJMIN}/contextvars.py", "${libdir}/python${PYTHON_MAJMIN}/decimal.py", "${libdir}/python${PYTHON_MAJMIN}/fractions.py", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_contextvars.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_decimal.*.so", "${libdir}/python${PYTHON_MAJMIN}/numbers.py" ], @@ -1004,8 +1039,7 @@ "shell": { "summary": "Python shell-like functionality", "rdepends": [ - "core", - "stringold" + "core" ], "files": [ "${libdir}/python${PYTHON_MAJMIN}/cmd.py", @@ -1150,8 +1184,10 @@ "venv": { "summary": "Provides support for creating lightweight virtual environments with their own site directories, optionally isolated from system site directories.", "rdepends": [ + "compression", "core", "logging", + "shell", "stringold" ], "files": [ diff --git a/meta/recipes-devtools/python/python3_3.14.10.bb b/meta/recipes-devtools/python/python3_3.14.10.bb index 9c45f8e0c67..5ffab530c63 100644 --- a/meta/recipes-devtools/python/python3_3.14.10.bb +++ b/meta/recipes-devtools/python/python3_3.14.10.bb @@ -572,6 +572,7 @@ RDEPENDS:${PN}-tkinter += "${@bb.utils.contains('PACKAGECONFIG', 'tk', '${MLPREF RDEPENDS:${PN}-idle += "${@bb.utils.contains('PACKAGECONFIG', 'tk', '${PN}-tkinter ${MLPREFIX}tcl', '', d)}" DEV_PKG_DEPENDENCY = "" RDEPENDS:${PN}-pydoc += "${PN}-io" +RDEPENDS:${PN}-ensurepip += "${PN}-compression" RDEPENDS:${PN}-tests:append:class-target = " ${MLPREFIX}bash" RDEPENDS:${PN}-tests:append:class-nativesdk = " ${MLPREFIX}bash"