python-nose fails to build with Python 3.14.0a1. + /usr/bin/python3 selftest.py import pkg_resources .......................setup called teardown called setup called teardown called F.....................nose.plugins.cover: ERROR: TOTAL Coverage did not reach minimum required: 100% .nose.plugins.cover: ERROR: TOTAL Coverage did not reach minimum required: 100% .nose.plugins.cover: ERROR: TOTAL Coverage did not reach minimum required: 100% .nose.plugins.cover: ERROR: TOTAL Coverage did not reach minimum required: 100% ./usr/lib64/python3.14/site-packages/coverage/inorout.py:523: CoverageWarning: Module moo was previously imported, but not measured (module-not-measured) self.warn(msg, slug="module-not-measured") nose.plugins.cover: ERROR: TOTAL Coverage did not reach minimum required: 100% .......................................................................FF.F.............S...S......................................................................................S......Exception ignored in: <generator object TestLoader.loadTestsFromGenerator.<locals>.generate at 0x7f59103d0c20> Traceback (most recent call last): File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed RuntimeError: generator ignored GeneratorExit ........................................................................SSSS..................................................SS...................... ====================================================================== FAIL: Doctest: multiprocess.rst ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib64/python3.14/doctest.py", line 2327, in runTest raise self.failureException(self.format_failure(new.getvalue())) AssertionError: Failed doctest test for multiprocess.rst File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/doc_tests/test_multiprocess/multiprocess.rst", line 0 ---------------------------------------------------------------------- File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/doc_tests/test_multiprocess/multiprocess.rst", line 222, in multiprocess.rst Failed example: run(argv=['nosetests', '-v', '--processes=2', test_can_split], plugins=[MultiProcess()]) #doctest: +ELLIPSIS Expected: setup called teardown called ... test_can_split.... ... FAILED (failures=...) Got: test_can_split.TestMe.test_one ... ok test_can_split.test_b ... ok test_can_split.test_a ... FAIL <BLANKLINE> ====================================================================== FAIL: test_can_split.test_a ---------------------------------------------------------------------- Traceback (most recent call last): ... AssertionError: len(['setup', 'teardown']) !=1 <BLANKLINE> ---------------------------------------------------------------------- Ran 3 tests in ...s <BLANKLINE> FAILED (failures=1) ====================================================================== FAIL: test_multiprocessing.test_keyboardinterrupt.test_keyboardinterrupt ---------------------------------------------------------------------- Traceback (most recent call last): File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/case.py", line 201, in runTest self.test(*self.arg) ~~~~~~~~~^^^^^^^^^^^ File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/test_keyboardinterrupt.py", line 76, in test_keyboardinterrupt assert 'test_timeout_finished' not in log ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AssertionError: -------------------- >> begin captured stdout << --------------------- ERROR ====================================================================== ERROR: test suite for <module 'keyboardinterrupt' from '/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/support/keyboardinterrupt.py'> ---------------------------------------------------------------------- Traceback (most recent call last): File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/plugins/multiprocess.py", line 395, in run iworker, addr, newtask_addrs, batch_result = resultQueue.get( ~~~~~~~~~~~~~~~^ timeout=nexttimeout) ^^^^^^^^^^^^^^^^^^^^ File "<string>", line 2, in get File "/usr/lib64/python3.14/multiprocessing/managers.py", line 824, in _callmethod kind, result = conn.recv() ~~~~~~~~~^^ File "/usr/lib64/python3.14/multiprocessing/connection.py", line 252, in recv buf = self._recv_bytes() File "/usr/lib64/python3.14/multiprocessing/connection.py", line 433, in _recv_bytes buf = self._recv(4) File "/usr/lib64/python3.14/multiprocessing/connection.py", line 398, in _recv chunk = read(handle, to_read) KeyboardInterrupt ---------------------------------------------------------------------- Ran 0 tests in 0.177s FAILED (errors=1) ---- ---- setup test_timeout test_timeout_finished test_pass teardown --------------------- >> end captured stdout << ---------------------- ====================================================================== FAIL: test_multiprocessing.test_keyboardinterrupt.test_keyboardinterrupt_twice ---------------------------------------------------------------------- Traceback (most recent call last): File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/case.py", line 201, in runTest self.test(*self.arg) ~~~~~~~~~^^^^^^^^^^^ File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/test_keyboardinterrupt.py", line 98, in test_keyboardinterrupt_twice assert 'test_timeout_finished' not in log ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AssertionError: -------------------- >> begin captured stdout << --------------------- ERROR ====================================================================== ERROR: test suite for <module 'keyboardinterrupt_twice' from '/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/support/keyboardinterrupt_twice.py'> ---------------------------------------------------------------------- Traceback (most recent call last): File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/plugins/multiprocess.py", line 395, in run iworker, addr, newtask_addrs, batch_result = resultQueue.get( ~~~~~~~~~~~~~~~^ timeout=nexttimeout) ^^^^^^^^^^^^^^^^^^^^ File "<string>", line 2, in get File "/usr/lib64/python3.14/multiprocessing/managers.py", line 824, in _callmethod kind, result = conn.recv() ~~~~~~~~~^^ File "/usr/lib64/python3.14/multiprocessing/connection.py", line 252, in recv buf = self._recv_bytes() File "/usr/lib64/python3.14/multiprocessing/connection.py", line 433, in _recv_bytes buf = self._recv(4) File "/usr/lib64/python3.14/multiprocessing/connection.py", line 398, in _recv chunk = read(handle, to_read) KeyboardInterrupt ---------------------------------------------------------------------- Ran 0 tests in 0.177s FAILED (errors=1) Traceback (most recent call last): File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/plugins/multiprocess.py", line 515, in run worker.join() ~~~~~~~~~~~^^ File "/usr/lib64/python3.14/multiprocessing/process.py", line 149, in join res = self._popen.wait(timeout) File "/usr/lib64/python3.14/multiprocessing/popen_fork.py", line 44, in wait return self.poll(os.WNOHANG if timeout == 0.0 else 0) ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.14/multiprocessing/popen_forkserver.py", line 65, in poll if not wait([self.sentinel], timeout): ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.14/multiprocessing/connection.py", line 1151, in wait ready = selector.select(timeout) File "/usr/lib64/python3.14/selectors.py", line 398, in select fd_event_list = self._selector.poll(timeout) KeyboardInterrupt During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/support/fake_nosetest.py", line 15, in <module> nose.main( ~~~~~~~~~^ defaultTest=sys.argv[1], argv=[sys.argv[0],'--processes=1','-v'], ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ config=Config(plugins=PluginManager(plugins=[MultiProcess()]))) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/core.py", line 118, in __init__ unittest.TestProgram.__init__( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ self, module=module, defaultTest=defaultTest, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ argv=argv, testRunner=testRunner, testLoader=testLoader, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **extra_args) ^^^^^^^^^^^^^ File "/usr/lib64/python3.14/unittest/main.py", line 104, in __init__ self.runTests() ~~~~~~~~~~~~~^^ File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/core.py", line 207, in runTests result = self.testRunner.run(self.test) File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/plugins/multiprocess.py", line 524, in run if thrownError: raise thrownError ^^^^^^^^^^^^^^^^^ File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/plugins/multiprocess.py", line 395, in run iworker, addr, newtask_addrs, batch_result = resultQueue.get( ~~~~~~~~~~~~~~~^ timeout=nexttimeout) ^^^^^^^^^^^^^^^^^^^^ File "<string>", line 2, in get File "/usr/lib64/python3.14/multiprocessing/managers.py", line 824, in _callmethod kind, result = conn.recv() ~~~~~~~~~^^ File "/usr/lib64/python3.14/multiprocessing/connection.py", line 252, in recv buf = self._recv_bytes() File "/usr/lib64/python3.14/multiprocessing/connection.py", line 433, in _recv_bytes buf = self._recv(4) File "/usr/lib64/python3.14/multiprocessing/connection.py", line 398, in _recv chunk = read(handle, to_read) KeyboardInterrupt ---- ---- setup test_timeout test_timeout_finished test_pass teardown --------------------- >> end captured stdout << ---------------------- ====================================================================== FAIL: runTest (test_multiprocessing.test_process_timeout.TestMPTimeout.runTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/test_process_timeout.py", line 10, in runTest assert "TimedOutException: 'timeout.test_timeout'" in self.output ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AssertionError ---------------------------------------------------------------------- Ran 385 tests in 30.311s FAILED (SKIP=9, failures=4) https://docs.python.org/3.14/whatsnew/3.14.html For the build logs, see: https://copr-be.cloud.fedoraproject.org/results/@python/python3.14/fedora-rawhide-x86_64/08189211-python-nose/ For all our attempts to build python-nose with Python 3.14, see: https://copr.fedorainfracloud.org/coprs/g/python/python3.14/package/python-nose/ 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.14: https://copr.fedorainfracloud.org/coprs/g/python/python3.14/ Let us know here if you have any questions. Python 3.14 is planned to be included in Fedora 43. To make that update smoother, we're building Fedora packages with all pre-releases of Python 3.14. 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.
I'm inclined to let this one finally rest in piece. I've been adding downstream-only Python compatibility patches since Python 3.5. If something important is blocked on nose, I'd rather spend my time on unblocking that thing.
ipython_genutils still uses nose and is used by nbclassic and mu. I opened https://src.fedoraproject.org/rpms/python-ipython_genutils/pull-request/5
There seems to be a rather giant dep tree (including systemtap, Pythons themselves, glusterfs, qemu...) using python-pytest-mpl which BuildRequires nose but does not need it: https://src.fedoraproject.org/rpms/python-pytest-mpl/pull-request/1
Couple more: https://src.fedoraproject.org/rpms/python-kubernetes/pull-request/5 https://src.fedoraproject.org/rpms/python-boto/pull-request/5 https://src.fedoraproject.org/rpms/python-spur/pull-request/3 https://src.fedoraproject.org/rpms/python-pyquery/pull-request/3 https://src.fedoraproject.org/rpms/python-fluidity-sm/pull-request/3
https://src.fedoraproject.org/rpms/python-behave/pull-request/6
https://src.fedoraproject.org/rpms/python-ordered-set/pull-request/4
https://src.fedoraproject.org/rpms/python-musicbrainzngs/pull-request/2
https://src.fedoraproject.org/rpms/python-deap/pull-request/3
https://src.fedoraproject.org/rpms/vigra/pull-request/5
https://src.fedoraproject.org/rpms/python-mapnik/pull-request/2 https://src.fedoraproject.org/rpms/python-nitime/pull-request/1
https://src.fedoraproject.org/rpms/python-jenkins/pull-request/3
https://src.fedoraproject.org/rpms/binwalk/pull-request/1
https://src.fedoraproject.org/rpms/python-ufl/pull-request/1
https://fedoraproject.org/wiki/Changes/RetirePythonNose
This bug appears to have been reported against 'rawhide' during the Fedora Linux 42 development cycle. Changing version to 42.
python-nose is retired