-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Open
Labels
Needs TriageIssues that need to be evaluated for severity and status.Issues that need to be evaluated for severity and status.bug
Description
setuptools version
main
Python version
3.15.0a6
OS
all
Additional environment information
This happens when we run tests builds of Fedora Python packages with Python 3.15 pre-releases.
Description
setuptools tests fail with:
________________________ TestDepends.testModuleExtract _________________________
self = <setuptools.tests.test_setuptools.TestDepends object at 0x7f07b8dda060>
@needs_bytecode
def testModuleExtract(self):
> from json import __version__
/builddir/build/BUILD/python-setuptools-80.10.2-build/setuptools-80.10.2/setuptools/tests/test_setuptools.py:82:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<frozen importlib._bootstrap>:1336: in _handle_fromlist
???
/usr/lib64/python3.15/json/__init__.py:371: in __getattr__
_deprecated("__version__", remove=(3, 20))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
name = '__version__'
message = '{name!r} is deprecated and slated for removal in Python {remove}'
def _deprecated(name, message=_DEPRECATED_MSG, *, remove, _version=sys.version_info):
"""Warn that *name* is deprecated or should be removed.
RuntimeError is raised if *remove* specifies a major/minor tuple older than
the current Python version or the same version but past the alpha.
The *message* argument is formatted with *name* and *remove* as a Python
version tuple (e.g. (3, 11)).
"""
remove_formatted = f"{remove[0]}.{remove[1]}"
if (_version[:2] > remove) or (_version[:2] == remove and _version[3] != "alpha"):
msg = f"{name!r} was slated for removal after Python {remove_formatted} alpha"
raise RuntimeError(msg)
else:
msg = message.format(name=name, remove=remove_formatted)
> _wm.warn(msg, DeprecationWarning, stacklevel=3)
E DeprecationWarning: '__version__' is deprecated and slated for removal in Python 3.20
/usr/lib64/python3.15/_py_warnings.py:889: DeprecationWarning
___________________________ TestDepends.testRequire ____________________________
self = <setuptools.tests.test_setuptools.TestDepends object at 0x7f07b8dd9f30>
@needs_bytecode
def testRequire(self):
req = Require('Json', '1.0.3', 'json')
assert req.name == 'Json'
assert req.module == 'json'
assert req.requested_version == Version('1.0.3')
assert req.attribute == '__version__'
assert req.full_name() == 'Json-1.0.3'
> from json import __version__
/builddir/build/BUILD/python-setuptools-80.10.2-build/setuptools-80.10.2/setuptools/tests/test_setuptools.py:101:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<frozen importlib._bootstrap>:1336: in _handle_fromlist
???
/usr/lib64/python3.15/json/__init__.py:371: in __getattr__
_deprecated("__version__", remove=(3, 20))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
name = '__version__'
message = '{name!r} is deprecated and slated for removal in Python {remove}'
def _deprecated(name, message=_DEPRECATED_MSG, *, remove, _version=sys.version_info):
"""Warn that *name* is deprecated or should be removed.
RuntimeError is raised if *remove* specifies a major/minor tuple older than
the current Python version or the same version but past the alpha.
The *message* argument is formatted with *name* and *remove* as a Python
version tuple (e.g. (3, 11)).
"""
remove_formatted = f"{remove[0]}.{remove[1]}"
if (_version[:2] > remove) or (_version[:2] == remove and _version[3] != "alpha"):
msg = f"{name!r} was slated for removal after Python {remove_formatted} alpha"
raise RuntimeError(msg)
else:
msg = message.format(name=name, remove=remove_formatted)
> _wm.warn(msg, DeprecationWarning, stacklevel=3)
E DeprecationWarning: '__version__' is deprecated and slated for removal in Python 3.20
/usr/lib64/python3.15/_py_warnings.py:889: DeprecationWarning
=========================== short test summary info ============================
FAILED setuptools/tests/test_setuptools.py::TestDepends::testModuleExtract - ...
FAILED setuptools/tests/test_setuptools.py::TestDepends::testRequire - Deprec...
This is coming from:
| from json import __version__ |
| from json import __version__ |
Using such an attribute from the Python standard library for tests won't be sustainable in the future, as they are being removed from everywhere.
python/cpython#76007
python/cpython#138675
Expected behavior
The tests should use a non-deprecated attribute for this.
How to Reproduce
$ tox -e py315 -- setuptools/tests/test_setuptools.py -k TestDepends -W 'ignore:os.path.commonprefix:DeprecationWarning'
The manual -W is to hide which covers this up pygments/pygments#3039
Output
.pkg-cpython315: _optional_hooks> python /usr/lib/python3.14/site-packages/pyproject_api/_backend.py True setuptools.build_meta
.pkg-cpython315: get_requires_for_build_editable> python /usr/lib/python3.14/site-packages/pyproject_api/_backend.py True setuptools.build_meta
.pkg-cpython315: build_editable> python /usr/lib/python3.14/site-packages/pyproject_api/_backend.py True setuptools.build_meta
py315: install_package> /usr/bin/uv pip install --reinstall --no-deps setuptools@.../pypa/setuptools/.tox/.tmp/package/36/setuptools-82.0.0-0.editable-py3-none-any.whl
py315: commands[0]> pytest setuptools/tests/test_setuptools.py -k TestDepends -W ignore:os.path.commonprefix:DeprecationWarning
============================= test session starts ==============================
platform linux -- Python 3.15.0a6, pytest-9.0.2, pluggy-1.6.0
cachedir: .tox/py315/.pytest_cache
rootdir: .../pypa/setuptools
configfile: pytest.ini
plugins: perf-0.15.0, enabler-3.4.0, mypy-1.0.1, jaraco.mongodb-12.4.0, typeguard-4.5.0, xdist-3.8.0, jaraco.test-5.6.0, checkdocs-2.14.0, cov-7.0.0, subprocess-1.5.3, home-0.6.0, jaraco.vcs-2.4.1, ruff-0.5, timeout-2.4.0
created: 12/12 workers
12 workers [5 items]
...FF [100%]
=================================== FAILURES ===================================
___________________________ TestDepends.testRequire ____________________________
[gw1] linux -- Python 3.15.0 .../pypa/setuptools/.tox/py315/bin/python3
self = <setuptools.tests.test_setuptools.TestDepends object at 0x7f2682f363f0>
@needs_bytecode
def testRequire(self):
req = Require('Json', '1.0.3', 'json')
assert req.name == 'Json'
assert req.module == 'json'
assert req.requested_version == Version('1.0.3')
assert req.attribute == '__version__'
assert req.full_name() == 'Json-1.0.3'
> from json import __version__
.../pypa/setuptools/setuptools/tests/test_setuptools.py:101:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<frozen importlib._bootstrap>:1336: in _handle_fromlist
???
/usr/lib64/python3.15/json/__init__.py:371: in __getattr__
_deprecated("__version__", remove=(3, 20))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
name = '__version__'
message = '{name!r} is deprecated and slated for removal in Python {remove}'
def _deprecated(name, message=_DEPRECATED_MSG, *, remove, _version=sys.version_info):
"""Warn that *name* is deprecated or should be removed.
RuntimeError is raised if *remove* specifies a major/minor tuple older than
the current Python version or the same version but past the alpha.
The *message* argument is formatted with *name* and *remove* as a Python
version tuple (e.g. (3, 11)).
"""
remove_formatted = f"{remove[0]}.{remove[1]}"
if (_version[:2] > remove) or (_version[:2] == remove and _version[3] != "alpha"):
msg = f"{name!r} was slated for removal after Python {remove_formatted} alpha"
raise RuntimeError(msg)
else:
msg = message.format(name=name, remove=remove_formatted)
> _wm.warn(msg, DeprecationWarning, stacklevel=3)
E DeprecationWarning: '__version__' is deprecated and slated for removal in Python 3.20
/usr/lib64/python3.15/_py_warnings.py:889: DeprecationWarning
________________________ TestDepends.testModuleExtract _________________________
[gw4] linux -- Python 3.15.0 .../pypa/setuptools/.tox/py315/bin/python3
self = <setuptools.tests.test_setuptools.TestDepends object at 0x7f853cc16060>
@needs_bytecode
def testModuleExtract(self):
> from json import __version__
.../pypa/setuptools/setuptools/tests/test_setuptools.py:82:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<frozen importlib._bootstrap>:1336: in _handle_fromlist
???
/usr/lib64/python3.15/json/__init__.py:371: in __getattr__
_deprecated("__version__", remove=(3, 20))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
name = '__version__'
message = '{name!r} is deprecated and slated for removal in Python {remove}'
def _deprecated(name, message=_DEPRECATED_MSG, *, remove, _version=sys.version_info):
"""Warn that *name* is deprecated or should be removed.
RuntimeError is raised if *remove* specifies a major/minor tuple older than
the current Python version or the same version but past the alpha.
The *message* argument is formatted with *name* and *remove* as a Python
version tuple (e.g. (3, 11)).
"""
remove_formatted = f"{remove[0]}.{remove[1]}"
if (_version[:2] > remove) or (_version[:2] == remove and _version[3] != "alpha"):
msg = f"{name!r} was slated for removal after Python {remove_formatted} alpha"
raise RuntimeError(msg)
else:
msg = message.format(name=name, remove=remove_formatted)
> _wm.warn(msg, DeprecationWarning, stacklevel=3)
E DeprecationWarning: '__version__' is deprecated and slated for removal in Python 3.20
/usr/lib64/python3.15/_py_warnings.py:889: DeprecationWarning
================================ tests coverage ================================
...
=========================== short test summary info ============================
FAILED setuptools/tests/test_setuptools.py::TestDepends::testRequire - Deprec...
FAILED setuptools/tests/test_setuptools.py::TestDepends::testModuleExtract - ...
========================= 2 failed, 3 passed in 2.27s ==========================
py315: exit 1 (2.97 seconds) .../pypa/setuptools> pytest setuptools/tests/test_setuptools.py -k TestDepends -W ignore:os.path.commonprefix:DeprecationWarning pid=293760
py315: FAIL code 1 (4.86=setup[1.88]+cmd[2.97] seconds)
evaluation failed :( (4.90 seconds)Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Needs TriageIssues that need to be evaluated for severity and status.Issues that need to be evaluated for severity and status.bug