Bug 2424312
| Summary: | typing-extensions vendored in setuptools is not compatible with Python 3.15.0a3 | ||
|---|---|---|---|
| Product: | [Fedora] Fedora | Reporter: | Karolina Surma <ksurma> |
| Component: | python-setuptools | Assignee: | Python Maintainers <python-maint> |
| Status: | CLOSED NOTABUG | QA Contact: | Fedora Extras Quality Assurance <extras-qa> |
| Severity: | unspecified | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | rawhide | CC: | cstratak, ksurma, mhroncok, python-maint, python-packagers-sig, thrnciar |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | --- | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2026-02-25 09:08:45 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | |||
| Bug Blocks: | 2412434 | ||
https://github.com/python/typing_extensions/pull/699 fixes a test I think it's https://github.com/python/typing_extensions/pull/595 that fixes the runtime issue --- How does this problem manifest in using setuptools? Does it break everything? Seems like setuptools pretty much does:
if TYPE_CHECKING:
from typing_extensions import ..
So this should not blow up on runtime at all :/
python-pytest-tornado's test sute, similar issue happens in python-pytest-freezegun:
_____________________________ test_type_annotation _____________________________
testdir = <Testdir local('/tmp/pytest-of-mockbuild/pytest-0/test_type_annotation0')>
@pytest.mark.xfail(sys.version_info < (3, 5),
reason='Type hints added in Python 3.5')
def test_type_annotation(testdir):
testdir.makepyfile(
test_type_annotation="""
import pytest
from tornado.ioloop import IOLoop
@pytest.mark.gen_test
def test_type_attrib(io_loop: IOLoop):
pass # Only check that gen_test works
""",
)
# Run tests
result = testdir.runpytest_inprocess()
# Check tests went off as they should:
> assert result.ret == 0
E assert <ExitCode.INTERNAL_ERROR: 3> == 0
E + where <ExitCode.INTERNAL_ERROR: 3> = <RunResult ret=3 len(stdout.lines)=0 len(stderr.lines)=70 duration=0.03s>.ret
/builddir/build/BUILD/python-pytest-tornado-0.8.1-build/pytest-tornado-0.8.1/test/test_fixtures.py:60: AssertionError
----------------------------- Captured stderr call -----------------------------
Traceback (most recent call last):
File "/usr/lib/python3.15/site-packages/_pytest/pytester.py", line 1165, in runpytest_inprocess
reprec = self.inline_run(*args, **kwargs)
File "/usr/lib/python3.15/site-packages/_pytest/pytester.py", line 1130, in inline_run
ret = main([str(x) for x in args], plugins=plugins)
File "/usr/lib/python3.15/site-packages/_pytest/config/__init__.py", line 156, in main
config = _prepareconfig(args, plugins)
File "/usr/lib/python3.15/site-packages/_pytest/config/__init__.py", line 342, in _prepareconfig
config = pluginmanager.hook.pytest_cmdline_parse(
pluginmanager=pluginmanager, args=args
)
File "/usr/lib/python3.15/site-packages/pluggy/_hooks.py", line 512, in __call__
return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.15/site-packages/pluggy/_manager.py", line 120, in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.15/site-packages/pluggy/_callers.py", line 167, in _multicall
raise exception
File "/usr/lib/python3.15/site-packages/pluggy/_callers.py", line 139, in _multicall
teardown.throw(exception)
~~~~~~~~~~~~~~^^^^^^^^^^^
File "/usr/lib/python3.15/site-packages/_pytest/helpconfig.py", line 112, in pytest_cmdline_parse
config = yield
^^^^^
File "/usr/lib/python3.15/site-packages/pluggy/_callers.py", line 121, in _multicall
res = hook_impl.function(*args)
File "/usr/lib/python3.15/site-packages/_pytest/config/__init__.py", line 1146, in pytest_cmdline_parse
self.parse(args)
~~~~~~~~~~^^^^^^
File "/usr/lib/python3.15/site-packages/_pytest/config/__init__.py", line 1527, in parse
self._preparse(args, addopts=addopts)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.15/site-packages/_pytest/config/__init__.py", line 1412, in _preparse
self.pluginmanager.load_setuptools_entrypoints("pytest11")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/usr/lib/python3.15/site-packages/pluggy/_manager.py", line 416, in load_setuptools_entrypoints
plugin = ep.load()
File "/usr/lib64/python3.15/importlib/metadata/__init__.py", line 216, in load
module = import_module(self.module)
File "/usr/lib64/python3.15/importlib/__init__.py", line 88, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1303, in _gcd_import
File "<frozen importlib._bootstrap>", line 1276, in _find_and_load
File "<frozen importlib._bootstrap>", line 1219, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 491, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1303, in _gcd_import
File "<frozen importlib._bootstrap>", line 1276, in _find_and_load
File "<frozen importlib._bootstrap>", line 1247, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 857, in _load_unlocked
File "/usr/lib/python3.15/site-packages/_pytest/assertion/rewrite.py", line 186, in exec_module
exec(co, module.__dict__)
~~~~^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.15/site-packages/setuptools/_vendor/typeguard/__init__.py", line 4, in <module>
from ._checkers import TypeCheckerCallable as TypeCheckerCallable
File "<frozen importlib._bootstrap>", line 1276, in _find_and_load
File "<frozen importlib._bootstrap>", line 1247, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 857, in _load_unlocked
File "/usr/lib/python3.15/site-packages/_pytest/assertion/rewrite.py", line 186, in exec_module
exec(co, module.__dict__)
~~~~^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.15/site-packages/setuptools/_vendor/typeguard/_checkers.py", line 38, in <module>
import typing_extensions
File "/usr/lib/python3.15/site-packages/setuptools/_vendor/typing_extensions.py", line 3641, in <module>
no_type_check_decorator = typing.no_type_check_decorator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.15/typing.py", line 3881, in __getattr__
raise AttributeError(f"module {__name__!r} has no attribute {attr!r}")
AttributeError: module 'typing' has no attribute 'no_type_check_decorator'
I keep seeing it around, the more I look at it, the weirder it seems to me that there's an attempt to import typing_extensions from setuptools.
python-binary-manager:
Check import: binman.etype.ti_board_config
Traceback (most recent call last):
File "/usr/lib/rpm/redhat/import_all_modules.py", line 106, in import_modules
importlib.import_module(module)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "/usr/lib64/python3.15/importlib/__init__.py", line 88, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1311, in _gcd_import
File "<frozen importlib._bootstrap>", line 1276, in _find_and_load
File "<frozen importlib._bootstrap>", line 1247, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 857, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 747, in exec_module
File "<frozen importlib._bootstrap>", line 491, in _call_with_frames_removed
File "/builddir/build/BUILD/python-binary-manager-0.0.6-build/BUILDROOT/usr/lib/python3.15/site-packages/binman/etype/ti_board_config.py", line 14, in <module>
from jsonschema import validate
File "/usr/lib/python3.15/site-packages/jsonschema/__init__.py", line 13, in <module>
from jsonschema._format import FormatChecker
File "/usr/lib/python3.15/site-packages/jsonschema/_format.py", line 11, in <module>
from jsonschema.exceptions import FormatError
File "/usr/lib/python3.15/site-packages/jsonschema/exceptions.py", line 15, in <module>
from referencing.exceptions import Unresolvable as _Unresolvable
File "/usr/lib/python3.15/site-packages/referencing/__init__.py", line 5, in <module>
from referencing._core import Anchor, Registry, Resource, Specification
File "/usr/lib/python3.15/site-packages/referencing/_core.py", line 12, in <module>
from typing_extensions import TypeVar
File "/usr/lib/python3.15/site-packages/setuptools/_vendor/typing_extensions.py", line 3641, in <module>
no_type_check_decorator = typing.no_type_check_decorator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.15/typing.py", line 3912, in __getattr__
raise AttributeError(f"module {__name__!r} has no attribute {attr!r}")
AttributeError: module 'typing' has no attribute 'no_type_check_decorator'
referencing has this bit in _core.py:
try:
from typing_extensions import TypeVar
except ImportError: # pragma: no cover
from typing import TypeVar
and this in pyproject.toml's dependencies:
"typing-extensions>=4.4.0; python_version<'3.13'",
Accidentally, typing_extensions can be imported, and that causes ruckus.
And it's all moot: the core issue is that I wasn't successful in building the newest setuptools in Copr. Once that's working, this issue will disappear, since it stopped vendoring typing_extensions. |
typing-extensions vendored in setuptools is not compatible with Python 3.15.0a3, e.g.: /usr/lib/python3.15/site-packages/setuptools/_vendor/typing_extensions.py:3641: in <module> no_type_check_decorator = typing.no_type_check_decorator See also: https://github.com/python/typing_extensions/pull/699