python_requires is invalid, breaking distlib
The python_requires
value in metadata contains trailing comma that makes it invalid. While setuptools doesn't seem to report the problem, it causes distlib to crash while iterating system packages:
$ pip install openpyxl distlib
[...]
$ python -c "import distlib.database; distlib.database.DistributionPath().get_distribution('openpyxl')"
Traceback (most recent call last):
File "/tmp/venv2/lib/python3.9/site-packages/distlib/metadata.py", line 677, in __init__
self._data = json.loads(data)
File "/usr/lib/python3.9/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.9/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.9/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/venv2/lib/python3.9/site-packages/distlib/database.py", line 240, in get_distribution
self._generate_cache()
File "/tmp/venv2/lib/python3.9/site-packages/distlib/database.py", line 167, in _generate_cache
for dist in self._yield_distributions():
File "/tmp/venv2/lib/python3.9/site-packages/distlib/database.py", line 148, in _yield_distributions
metadata = Metadata(fileobj=stream, scheme='legacy')
File "/tmp/venv2/lib/python3.9/site-packages/distlib/metadata.py", line 686, in __init__
self._legacy = LegacyMetadata(fileobj=StringIO(data),
File "/tmp/venv2/lib/python3.9/site-packages/distlib/metadata.py", line 261, in __init__
self.read_file(fileobj)
File "/tmp/venv2/lib/python3.9/site-packages/distlib/metadata.py", line 359, in read_file
self.set(field, value)
File "/tmp/venv2/lib/python3.9/site-packages/distlib/metadata.py", line 459, in set
if not scheme.is_valid_constraint_list(value):
File "/tmp/venv2/lib/python3.9/site-packages/distlib/version.py", line 716, in is_valid_constraint_list
return self.is_valid_matcher('dummy_name (%s)' % s)
File "/tmp/venv2/lib/python3.9/site-packages/distlib/version.py", line 703, in is_valid_matcher
self.matcher(s)
File "/tmp/venv2/lib/python3.9/site-packages/distlib/version.py", line 104, in __init__
r = self.parse_requirement(s)
File "/tmp/venv2/lib/python3.9/site-packages/distlib/version.py", line 98, in parse_requirement
return parse_requirement(s)
File "/tmp/venv2/lib/python3.9/site-packages/distlib/util.py", line 237, in parse_requirement
versions, _ = get_versions(s)
File "/tmp/venv2/lib/python3.9/site-packages/distlib/util.py", line 220, in get_versions
raise SyntaxError('invalid constraint: %s' % ver_remaining)
SyntaxError: invalid constraint:
(yes, the error reporting is horrible)
The fix is:
diff -dupr a/setup.py b/setup.py
--- a/setup.py 2021-05-29 19:21:13.876463476 +0200
+++ b/setup.py 2021-05-29 19:21:21.986626313 +0200
@@ -74,7 +74,7 @@ setup(
author_email=__author_email__,
url=__url__,
license=__license__,
- python_requires=">=3.6, ",
+ python_requires=">=3.6",
install_requires=[
'et_xmlfile',
],