python-tabulate fails to build with Python 3.10.0a5. Failure: ImportError (cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py)) ... ERROR Failure: ImportError (cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py)) ... ERROR Failure: ImportError (cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py)) ... ERROR Failure: ImportError (cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py)) ... ERROR ====================================================================== ERROR: Failure: ImportError (cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py)) ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/usr/lib/python3.10/site-packages/nose/loader.py", line 416, in loadTestsFromName module = self.importer.importFromPath( File "/usr/lib/python3.10/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python3.10/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/usr/lib64/python3.10/imp.py", line 234, in load_module return load_source(name, filename, file) File "/usr/lib64/python3.10/imp.py", line 171, in load_source module = _load(spec) File "<frozen importlib._bootstrap>", line 729, in _load File "<frozen importlib._bootstrap>", line 698, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 833, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/builddir/build/BUILD/tabulate-0.8.7/test/test_api.py", line 7, in <module> from tabulate import tabulate, tabulate_formats, simple_separated_format File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module> from collections import Iterable ImportError: cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py) ====================================================================== ERROR: test_cli.test_script_from_stdin_to_stdout Command line utility: read from stdin, print to stdout ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/case.py", line 197, in runTest self.test(*self.arg) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 119, in test_script_from_stdin_to_stdout out = run_and_capture_stdout(cmd, input=sample_input()) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 96, in run_and_capture_stdout raise IOError(err) OSError: b'Traceback (most recent call last):\n File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module>\n from collections import Iterable\nImportError: cannot import name \'Iterable\' from \'collections\' (/usr/lib64/python3.10/collections/__init__.py)\n' ====================================================================== ERROR: test_cli.test_script_from_file_to_stdout Command line utility: read from file, print to stdout ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/case.py", line 197, in runTest self.test(*self.arg) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 132, in test_script_from_file_to_stdout out = run_and_capture_stdout(cmd) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 96, in run_and_capture_stdout raise IOError(err) OSError: b'Traceback (most recent call last):\n File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module>\n from collections import Iterable\nImportError: cannot import name \'Iterable\' from \'collections\' (/usr/lib64/python3.10/collections/__init__.py)\n' ====================================================================== ERROR: test_cli.test_script_from_file_to_file Command line utility: read from file, write to file ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/case.py", line 197, in runTest self.test(*self.arg) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 152, in test_script_from_file_to_file out = run_and_capture_stdout(cmd) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 96, in run_and_capture_stdout raise IOError(err) OSError: b'Traceback (most recent call last):\n File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module>\n from collections import Iterable\nImportError: cannot import name \'Iterable\' from \'collections\' (/usr/lib64/python3.10/collections/__init__.py)\n' ====================================================================== ERROR: test_cli.test_script_header_option Command line utility: -1, --header option ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/case.py", line 197, in runTest self.test(*self.arg) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 172, in test_script_header_option out = run_and_capture_stdout(cmd, input=raw_table) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 96, in run_and_capture_stdout raise IOError(err) OSError: b'Traceback (most recent call last):\n File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module>\n from collections import Iterable\nImportError: cannot import name \'Iterable\' from \'collections\' (/usr/lib64/python3.10/collections/__init__.py)\n' ====================================================================== ERROR: test_cli.test_script_sep_option Command line utility: -s, --sep option ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/case.py", line 197, in runTest self.test(*self.arg) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 185, in test_script_sep_option out = run_and_capture_stdout(cmd, input=raw_table) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 96, in run_and_capture_stdout raise IOError(err) OSError: b'Traceback (most recent call last):\n File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module>\n from collections import Iterable\nImportError: cannot import name \'Iterable\' from \'collections\' (/usr/lib64/python3.10/collections/__init__.py)\n' ====================================================================== ERROR: test_cli.test_script_floatfmt_option Command line utility: -F, --float option ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/case.py", line 197, in runTest self.test(*self.arg) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 197, in test_script_floatfmt_option out = run_and_capture_stdout(cmd, input=raw_table) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 96, in run_and_capture_stdout raise IOError(err) OSError: b'Traceback (most recent call last):\n File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module>\n from collections import Iterable\nImportError: cannot import name \'Iterable\' from \'collections\' (/usr/lib64/python3.10/collections/__init__.py)\n' ====================================================================== ERROR: test_cli.test_script_format_option Command line utility: -f, --format option ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/case.py", line 197, in runTest self.test(*self.arg) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 209, in test_script_format_option out = run_and_capture_stdout(cmd, input=raw_table) File "/builddir/build/BUILD/tabulate-0.8.7/test/test_cli.py", line 96, in run_and_capture_stdout raise IOError(err) OSError: b'Traceback (most recent call last):\n File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module>\n from collections import Iterable\nImportError: cannot import name \'Iterable\' from \'collections\' (/usr/lib64/python3.10/collections/__init__.py)\n' ====================================================================== ERROR: Failure: ImportError (cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py)) ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/usr/lib/python3.10/site-packages/nose/loader.py", line 416, in loadTestsFromName module = self.importer.importFromPath( File "/usr/lib/python3.10/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python3.10/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/usr/lib64/python3.10/imp.py", line 234, in load_module return load_source(name, filename, file) File "/usr/lib64/python3.10/imp.py", line 171, in load_source module = _load(spec) File "<frozen importlib._bootstrap>", line 729, in _load File "<frozen importlib._bootstrap>", line 698, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 833, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/builddir/build/BUILD/tabulate-0.8.7/test/test_input.py", line 7, in <module> from tabulate import tabulate File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module> from collections import Iterable ImportError: cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py) ====================================================================== ERROR: Failure: ImportError (cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py)) ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/usr/lib/python3.10/site-packages/nose/loader.py", line 416, in loadTestsFromName module = self.importer.importFromPath( File "/usr/lib/python3.10/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python3.10/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/usr/lib64/python3.10/imp.py", line 234, in load_module return load_source(name, filename, file) File "/usr/lib64/python3.10/imp.py", line 171, in load_source module = _load(spec) File "<frozen importlib._bootstrap>", line 729, in _load File "<frozen importlib._bootstrap>", line 698, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 833, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/builddir/build/BUILD/tabulate-0.8.7/test/test_internal.py", line 7, in <module> import tabulate as T File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module> from collections import Iterable ImportError: cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py) ====================================================================== ERROR: Failure: ImportError (cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py)) ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/usr/lib/python3.10/site-packages/nose/loader.py", line 416, in loadTestsFromName module = self.importer.importFromPath( File "/usr/lib/python3.10/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python3.10/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/usr/lib64/python3.10/imp.py", line 234, in load_module return load_source(name, filename, file) File "/usr/lib64/python3.10/imp.py", line 171, in load_source module = _load(spec) File "<frozen importlib._bootstrap>", line 729, in _load File "<frozen importlib._bootstrap>", line 698, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 833, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/builddir/build/BUILD/tabulate-0.8.7/test/test_output.py", line 7, in <module> import tabulate as tabulate_module File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module> from collections import Iterable ImportError: cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py) ====================================================================== ERROR: Failure: ImportError (cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py)) ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/usr/lib/python3.10/site-packages/nose/loader.py", line 416, in loadTestsFromName module = self.importer.importFromPath( File "/usr/lib/python3.10/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python3.10/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/usr/lib64/python3.10/imp.py", line 234, in load_module return load_source(name, filename, file) File "/usr/lib64/python3.10/imp.py", line 171, in load_source module = _load(spec) File "<frozen importlib._bootstrap>", line 729, in _load File "<frozen importlib._bootstrap>", line 698, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 833, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/builddir/build/BUILD/tabulate-0.8.7/test/test_regression.py", line 7, in <module> from tabulate import tabulate, _text_type, _long_type, TableFormat, Line, DataRow File "/builddir/build/BUILD/tabulate-0.8.7/tabulate.py", line 16, in <module> from collections import Iterable ImportError: cannot import name 'Iterable' from 'collections' (/usr/lib64/python3.10/collections/__init__.py) ---------------------------------------------------------------------- Ran 12 tests in 0.360s FAILED (errors=12) Test failed: <unittest.runner.TextTestResult run=12 errors=12 failures=0> bpo-37324: Remove deprecated aliases to Collections Abstract Base Classes from the collections module. https://docs.python.org/3.10/whatsnew/changelog.html#python-3-10-0-alpha-5 For the build logs, see: https://copr-be.cloud.fedoraproject.org/results/@python/python3.10/fedora-rawhide-x86_64/01952498-python-tabulate/ For all our attempts to build python-tabulate with Python 3.10, see: https://copr.fedorainfracloud.org/coprs/g/python/python3.10/package/python-tabulate/ Testing and mass rebuild of packages is happening in copr. You can follow these instructions to test locally in mock if your package builds with Python 3.10: https://copr.fedorainfracloud.org/coprs/g/python/python3.10/ Let us know here if you have any questions. Python 3.10 will be included in Fedora 35. To make that update smoother, we're building Fedora packages with early pre-releases of Python 3.10. A build failure prevents us from testing all dependent packages (transitive [Build]Requires), so if this package is required a lot, it's important for us to get it fixed soon. We'd appreciate help from the people who know this package best, but if you don't want to work on this now, let us know so we can try to work around it on our side.
So, tabulate already "fixed" this many years ago, but they do: if python_version_tuple() >= ("3", "3", "0"): from collections.abc import Iterable else: from collections import Iterable And obviously, ("3", "10", "0a5") < ("3", "3", "0") because strings. Since upstream fix is proposed for a while, I suggest we patch it in Fedora temporarily to: from collections.abc import Iterable
PR: https://src.fedoraproject.org/rpms/python-tabulate/pull-request/2#
This bug appears to have been reported against 'rawhide' during the Fedora 34 development cycle. Changing version to 34.