setup.py: fix version parsing on Python 3.14 (ast.Str removed)#589
setup.py: fix version parsing on Python 3.14 (ast.Str removed)#589sookach wants to merge 1 commit intohtml5lib:masterfrom
setup.py: fix version parsing on Python 3.14 (ast.Str removed)#589Conversation
|
This isn't right for pre-3.14 versions - the |
Python 3.14 removes the ast.Str node type. String literals now appear as ast.Constant(value=str). Update the AST check to accept both ast.Str (for older Pythons) and ast.Constant with a string value (for Python 3.8+), allowing html5lib to build successfully on Python 3.14 while remaining compatible with older version.
|
Thanks! Updated the PR. |
|
Could you fix appveyor? For example the flake8 formatting. setup.py declares python_requires >= 2.7, but Python 3.13 is not tested in appveyor. Python 3.7 is EOL since 2023-06-27, when will it be allowed to not stay compatible anymore?
Python 2.7 is EOL since 2020-01-01, when will it be allowed to not stay compatible anymore?
|
Use an upstream pull request [0] to handle ast.Str deprecation/removal, as the existing patch fails:
Traceback (most recent call last):
File "/usr/local/lib/python3.13t/site-packages/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
main()
~~~~^^
File "/usr/local/lib/python3.13t/site-packages/pyproject_hooks/_in_process/_in_process.py", line 373, in main
json_out["return_val"] = hook(**hook_input["kwargs"])
~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13t/site-packages/pyproject_hooks/_in_process/_in_process.py", line 143, in get_requires_for_build_wheel
return hook(config_settings)
File "/usr/local/lib/python3.13t/site-packages/setuptools/build_meta.py", line 333, in get_requires_for_build_wheel
return self._get_build_requires(config_settings, requirements=[])
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13t/site-packages/setuptools/build_meta.py", line 301, in _get_build_requires
self.run_setup()
~~~~~~~~~~~~~~^^
File "/usr/local/lib/python3.13t/site-packages/setuptools/build_meta.py", line 520, in run_setup
super().run_setup(setup_script=setup_script)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13t/site-packages/setuptools/build_meta.py", line 317, in run_setup
exec(code, locals())
~~~~^^^^^^^^^^^^^^^^
File "<string>", line 96, in <module>
File "/usr/local/lib/python3.13t/site-packages/setuptools/__init__.py", line 117, in setup
return distutils.core.setup(**attrs) # type: ignore[return-value]
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/usr/local/lib/python3.13t/site-packages/setuptools/_distutils/core.py", line 148, in setup
_setup_distribution = dist = klass(attrs)
~~~~~^^^^^^^
File "/usr/local/lib/python3.13t/site-packages/setuptools/dist.py", line 332, in __init__
self.metadata.version = self._normalize_version(self.metadata.version)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13t/site-packages/setuptools/dist.py", line 368, in _normalize_version
normalized = str(Version(version))
~~~~~~~^^^^^^^^^
File "/usr/local/lib/python3.13t/site-packages/packaging/version.py", line 359, in __init__
match = self._regex.fullmatch(version)
TypeError: expected string or bytes-like object, got 'Constant'
While here:
- remove all references to pkg_resources, removed in setuptools 82+
- switch to USE_PYTHON=pep517
[0] html5lib/html5lib-python#589
PR: 293763
Approved by: rm (maintainer)
Python 3.14 removes the ast.Str node type. String literals now appear as ast.Constant(value=str).
Update the AST check to accept both ast.Str (for older Pythons) and ast.Constant with a string value (for Python 3.8+), allowing html5lib to build successfully on Python 3.14 while remaining compatible with older version. Tested at desk with
pip install -e .Fixes: #588