public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
From: Trevor Gamblin <tgamblin@baylibre.com>
To: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>,
	openembedded-core@lists.openembedded.org
Subject: Re: [OE-core][PATCH 0/5 v2] python3: upgrade 3.13.9 -> 3.14.2
Date: Mon, 22 Dec 2025 13:36:43 -0500	[thread overview]
Message-ID: <adc441a8-e19a-4d61-a3bc-9ec0927b434f@baylibre.com> (raw)
In-Reply-To: <DF4LE2CKH2GP.1O49L3MTHRQIG@bootlin.com>


On 2025-12-22 03:11, Mathieu Dubois-Briand wrote:
> On Fri Dec 19, 2025 at 2:47 PM CET, Trevor Gamblin wrote:
>> Compared to v1
>> (https://lists.openembedded.org/g/openembedded-core/message/227955):
>>
>> - Drop python3-bcrypt upgrade, as someone else has submitted that;
>> - Drop rpm patch to manually override Python3_SITEARCH with a patch, as that was
>>    masking the real issue (see below);
>> - Add a new patch to fix python3targetconfig by exporting _PYTHON_PROJECT_BASE,
>>    which Python's sysconfig looks for (as of 3.14.0) when doing
>>    cross-compilation. The absence of this was resulting in packages like rpm
>>    finding paths for the native interpreter when making use of sysconfig, when
>>    they needed the host values.
>>
>> Note that I've dropped my own version of the python3-bcrypt upgrade, but I
>> tested this patch series on top of the other one that was submitted, as
>> otherwise the ptest images would break during build (version mismatch errors
>> around PyO3, which is fixed with the bcrypt upgrade).
>>
>> v1 details below.
>>
>> This supersedes a previous series sent, which only did the 3.14.0 upgrade.
>>
>> Compared to the first series
>> (https://lists.openembedded.org/g/openembedded-core/message/227310), I've
>> done the following:
>>
>> - Added a commit for including the '_py_warnings' and 'annotationlib' modules in
>>    python3-core;
>> - Adds the python 3.14.2 upgrade;
>> - Removed commits for adding python3-misc to RDEPENDS for python3-pytest and
>>    python3-jsonpointer, as these are now solved by a new patch to add new modules
>>    to python3-core in the manifest. Doing it this way was fragile in the sense
>>    that there were many other recipes needing this same fix that testing didn't
>>    easily catch, and it doesn't make sense to add python3-misc to recipe RDEPENDS
>>    just because (for example) python3-logging (another package split) is trying
>>    to make use of warnings, but can't find the right module;
>> - Modified the rpm commit to apply a patch (submitted upstream) to fix
>>    CMakeLists.txt, rather than a do_configure prepend;
>> - Fixed the Python 3.14.0 upgrade commit so that one of the patches we carry to
>>    skip tests doesn't include duplicate calls to the relevant skip functions.
>>
>> I've kept the upgrades from 3.13.9 to 3.14.0 and 3.14.0 to 3.14.2 separate to
>> reflect separate testing and let people review those changelogs individually if
>> desired.
>>
>> Trevor Gamblin (5):
>>    python3: upgrade 3.13.9 -> 3.14.0
>>    python3targetconfig: export _PYTHON_PROJECT_BASE
>>    python_pep517: add --prefix to nativepython3 call
>>    python3: upgrade 3.14.0 -> 3.14.2
>>    python3: add _py_warnings, annotationlib to core
>>
> Hi Trevor,
>
> Thanks for the new version. It looks like we are having issues with
> maturin and click.
>
> Testing 'maturin develop' requires Rust cross-canadian in the SDK
> Traceback (most recent call last):
>    File "/srv/pokybuild/yocto-worker/qemux86/build/layers/openembedded-core/meta/lib/oeqa/sdk/cases/maturin.py", line 30, in test_maturin_list_python
>      self.assertIn(expected, output)
>      ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
> AssertionError: '3.14 at /srv/pokybuild/yocto-worker/qemux86/build/build/tmp/work/qemux86-poky-linux/core-image-minimal/1.0/testsdkext/buildtools/sysroots/x86_64-pokysdk-linux/usr/bin/python3' not found in '🐍 1 python interpreter found:\n - CPython 3.13 at /srv/pokybuild/yocto-worker/qemux86/build/buildtools/sysroots/x86_64-pokysdk-linux/usr/bin/python3.13\n'
> ...
> RESULTS - maturin.MaturinTest.test_maturin_list_python: FAILED (3.57s)
I'm not sure how to address this one - it looks like the problem is that 
the buildtools tarball has a 3.13.4 binary in it (at least when I try 
locally). Where does that get updated?
>
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/30/builds/2876
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/36/builds/2900
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/45/builds/837
>
> AssertionError:
> Failed ptests:
> {'python3-click': 'START: ptest-runner\n'
>                    '2025-12-21T20:15\n'
>                    '\n'
>                    '../../python3.14/ast.py:620: in unparse\n'
>                    '    unparser = _Unparser()\n'
>                    '               ^^^^^^^^^\n'
>                    "E   NameError: name '_Unparser' is not defined\n"
>                    '\n'
>                    'During handling of the above exception, another exception '
>                    'occurred:\n'
>                    '../../python3.14/site-packages/pluggy/_hooks.py:512: in '
>                    '__call__\n'
>                    '    return self._hookexec(self.name, '
>                    'self._hookimpls.copy(), kwargs, firstresult)\n'
>                    '           '
>                    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/site-packages/pluggy/_manager.py:120: in '
>                    '_hookexec\n'
>                    '    return self._inner_hookexec(hook_name, methods, kwargs, '
>                    'firstresult)\n'
>                    '           '
>                    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/site-packages/_pytest/python.py:240: in '
>                    'pytest_pycollect_makeitem\n'
>                    '    return list(collector._genfunctions(name, obj))\n'
>                    '           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/site-packages/_pytest/python.py:448: in '
>                    '_genfunctions\n'
>                    '    definition = FunctionDefinition.from_parent(self, '
>                    'name=name, callobj=funcobj)\n'
>                    '                 '
>                    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/site-packages/_pytest/python.py:1625: in '
>                    'from_parent\n'
>                    '    return super().from_parent(parent=parent, **kw)\n'
>                    '           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/site-packages/_pytest/nodes.py:233: in '
>                    'from_parent\n'
>                    '    return cls._create(parent=parent, **kw)\n'
>                    '           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/site-packages/_pytest/nodes.py:110: in '
>                    '_create\n'
>                    '    return super().__call__(*k, **kw)  # type: '
>                    'ignore[no-any-return,misc]\n'
>                    '           ^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/site-packages/_pytest/python.py:1616: in '
>                    '__init__\n'
>                    '    fixtureinfo = fm.getfixtureinfo(self, self.obj, '
>                    'self.cls)\n'
>                    '                  '
>                    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/site-packages/_pytest/fixtures.py:1565: in '
>                    'getfixtureinfo\n'
>                    '    argnames = getfuncargnames(func, name=node.name, '
>                    'cls=cls)\n'
>                    '               '
>                    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/site-packages/_pytest/compat.py:136: in '
>                    'getfuncargnames\n'
>                    '    parameters = signature(function).parameters.values()\n'
>                    '                 ^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/site-packages/_pytest/compat.py:70: in '
>                    'signature\n'
>                    '    return inspect.signature(obj, '
>                    'annotation_format=Format.STRING)\n'
>                    '           '
>                    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/inspect.py:3321: in signature\n'
>                    '    return Signature.from_callable(obj, '
>                    'follow_wrapped=follow_wrapped,\n'
>                    '../../python3.14/inspect.py:3036: in from_callable\n'
>                    '    return _signature_from_callable(obj, sigcls=cls,\n'
>                    '../../python3.14/inspect.py:2511: in '
>                    '_signature_from_callable\n'
>                    '    return _signature_from_function(sigcls, obj,\n'
>                    '../../python3.14/inspect.py:2334: in '
>                    '_signature_from_function\n'
>                    '    annotations = get_annotations(func, globals=globals, '
>                    'locals=locals, eval_str=eval_str,\n'
>                    '../../python3.14/annotationlib.py:981: in get_annotations\n'
>                    '    ann = _get_and_call_annotate(obj, format)\n'
>                    '          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/annotationlib.py:1112: in '
>                    '_get_and_call_annotate\n'
>                    '    ann = call_annotate_function(annotate, format, '
>                    'owner=obj)\n'
>                    '          '
>                    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/annotationlib.py:750: in '
>                    'call_annotate_function\n'
>                    '    key: _stringify_single(val)\n'
>                    '         ^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/annotationlib.py:883: in '
>                    '_stringify_single\n'
>                    '    return repr(anno)\n'
>                    '           ^^^^^^^^^^\n'
>                    '../../python3.14/annotationlib.py:487: in __repr__\n'
>                    '    return ast.unparse(self.__ast_node__)\n'
>                    '           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n'
>                    '../../python3.14/ast.py:622: in unparse\n'
>                    '    from _ast_unparse import Unparser as _Unparser\n'
>                    "E   ModuleNotFoundError: No module named '_ast_unparse'\n"
>                    'ERROR: '
>                    'tests/test_shell_completion.py:tests/test_shell_completion.py\n'
>                    '============================================================================\n'
>                    'Testsuite summary\n'
>                    '# TOTAL: 1\n'
>                    '# PASS: 0\n'
>                    '# SKIP: 0\n'
>                    '# XFAIL: 0\n'
>                    '# FAIL: 0\n'
>                    '# XPASS: 0\n'
>                    '# ERROR: 1\n'
>                    '\n'
>                    'ERROR: Exit status is 2\n'
>                    'DURATION: 28\n'}
>
> ptests which had no test results:
> ['python3-click']
>
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/56/builds/860
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/61/builds/2751
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/73/builds/2794
>
> Ptest logs can be found here:
>
> http://valkyrie.yocto.io/pub/non-release/20251221-102/testresults/qemuriscv64-ptest/core-image-ptest-python3-click/
> http://valkyrie.yocto.io/pub/non-release/20251221-102/testresults/qemuarm64-ptest/core-image-ptest-python3-click/
> http://valkyrie.yocto.io/pub/non-release/20251221-102/testresults/qemux86-64-ptest/core-image-ptest-python3-click/
>
> Can you have a look at these failures?
>
> Thanks,
> Mathieu
>


  reply	other threads:[~2025-12-22 18:36 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-19 13:47 [OE-core][PATCH 0/5 v2] python3: upgrade 3.13.9 -> 3.14.2 Trevor Gamblin
2025-12-19 13:47 ` [PATCH 1/5 v2] python3: upgrade 3.13.9 -> 3.14.0 Trevor Gamblin
2025-12-19 13:47 ` [PATCH 2/5 v2] python3targetconfig: export _PYTHON_PROJECT_BASE Trevor Gamblin
2025-12-19 13:47 ` [PATCH 3/5 v2] python_pep517: add --prefix to nativepython3 call Trevor Gamblin
2025-12-19 13:47 ` [PATCH 4/5 v2] python3: upgrade 3.14.0 -> 3.14.2 Trevor Gamblin
2025-12-19 13:47 ` [PATCH 5/5 v2] python3: add _py_warnings, annotationlib to core Trevor Gamblin
2025-12-22  8:11 ` [OE-core][PATCH 0/5 v2] python3: upgrade 3.13.9 -> 3.14.2 Mathieu Dubois-Briand
2025-12-22 18:36   ` Trevor Gamblin [this message]
2025-12-22 19:33     ` Alexander Kanavin
2025-12-22 19:52       ` Trevor Gamblin
2025-12-22 20:00         ` Alexander Kanavin
2026-01-05 14:17           ` Trevor Gamblin
2026-01-06  9:39             ` Alexander Kanavin
2026-01-06 19:22               ` Trevor Gamblin
     [not found]               ` <18883AAF7D8D6C1A.2355985@lists.openembedded.org>
2026-01-08 13:47                 ` Trevor Gamblin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=adc441a8-e19a-4d61-a3bc-9ec0927b434f@baylibre.com \
    --to=tgamblin@baylibre.com \
    --cc=mathieu.dubois-briand@bootlin.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox