Bug 1788491

Summary: dbus-python fails to build with Python 3.9
Product: [Fedora] Fedora Reporter: Miro Hrončok <mhroncok>
Component: dbus-pythonAssignee: Alternative GTK desktop environments <alt-gtk-de-sig>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: alt-gtk-de-sig, caillon+fedoraproject, cstratak, gnome-sig, john.j5live, mclasen, mhroncok, rdieter, rhughes, rstrode, sandmann, shawn.p.huang, stefano
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: 1.2.16-1.fc32, 1.2.16-1.fc33 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-02-12 10:00:51 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1785415    

Description Miro Hrončok 2020-01-07 11:17:04 UTC
dbus-python fails to build with Python 3.9.0a2.

ERROR: test/test-p2p
====================

/builddir/build/BUILD/dbus-python-1.2.8/python3-build/./test/test-p2p.py:32: DeprecationWarning: Importing dbus.glib to use the GLib main loop with dbus-python is deprecated.
Instead, use this sequence:

    from dbus.mainloop.glib import DBusGMainLoop

    DBusGMainLoop(set_as_default=True)

  import dbus.glib
Traceback (most recent call last):
  File "/builddir/build/BUILD/dbus-python-1.2.8/python3-build/./test/test-p2p.py", line 33, in <module>
    import dbus.service
  File "/builddir/build/BUILD/dbus-python-1.2.8/python3-build/dbus/service.py", line 33, in <module>
    from collections import Sequence
ImportError: cannot import name 'Sequence' from 'collections' (/usr/lib64/python3.9/collections/__init__.py)
ERROR: test/test-p2p.py - missing test plan
ERROR: test/test-p2p.py - exited with status 1

ERROR: test/test-signals
========================

/builddir/build/BUILD/dbus-python-1.2.8/python3-build/./test/test-signals.py:34: DeprecationWarning: Importing dbus.glib to use the GLib main loop with dbus-python is deprecated.
Instead, use this sequence:

    from dbus.mainloop.glib import DBusGMainLoop

    DBusGMainLoop(set_as_default=True)

  import dbus.glib
Traceback (most recent call last):
  File "/builddir/build/BUILD/dbus-python-1.2.8/python3-build/./test/test-signals.py", line 35, in <module>
    import dbus.service
  File "/builddir/build/BUILD/dbus-python-1.2.8/python3-build/dbus/service.py", line 33, in <module>
    from collections import Sequence
ImportError: cannot import name 'Sequence' from 'collections' (/usr/lib64/python3.9/collections/__init__.py)
ERROR: test/test-signals.py - missing test plan
ERROR: test/test-signals.py - exited with status 1

ERROR: test/run-test
====================

# DBUS_TOP_SRCDIR=/builddir/build/BUILD/dbus-python-1.2.8/python3-build
# DBUS_TOP_BUILDDIR=/builddir/build/BUILD/dbus-python-1.2.8/python3-build
# PYTHONPATH=/builddir/build/BUILD/dbus-python-1.2.8/python3-build:/builddir/build/BUILD/dbus-python-1.2.8/python3-build/test:/builddir/build/BUILD/dbus-python-1.2.8/python3-build/.libs:/builddir/build/BUILD/dbus-python-1.2.8/python3-build/test/.libs
# PYTHON=/usr/bin/python3
dbus-daemon[16464]: [session uid=1001 pid=16464] Connection :1.0 (uid=1001 pid=16469 comm="dbus-monitor " label="unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023") became a monitor.
/builddir/build/BUILD/dbus-python-1.2.8/python3-build/test/cross-test-server.py:33: DeprecationWarning: Importing dbus.glib to use the GLib main loop with dbus-python is deprecated.
Instead, use this sequence:

    from dbus.mainloop.glib import DBusGMainLoop

    DBusGMainLoop(set_as_default=True)

  import dbus.glib
Traceback (most recent call last):
  File "/builddir/build/BUILD/dbus-python-1.2.8/python3-build/test/cross-test-server.py", line 35, in <module>
    from dbus.service import BusName
  File "/builddir/build/BUILD/dbus-python-1.2.8/python3-build/dbus/service.py", line 33, in <module>
    from collections import Sequence
ImportError: cannot import name 'Sequence' from 'collections' (/usr/lib64/python3.9/collections/__init__.py)
dbus-daemon[16464]: [session uid=1001 pid=16464] Reloaded configuration
timed out
# running cross-test (for better diagnostics use mjj29's dbus-test)
ERROR: test/run-test.sh - missing test plan
ERROR: test/run-test.sh - exited with status 1



Importing abc classes from collections was deprecated since at least Python 3.7 and now it is dropped from 3.9.

The easiest way out of this is to drop the Python 2 package (bz1787240) and patch the sources to import Sequence (and possibly others) from collections.abc.

Or alternatively, if Python 2 support is still desired (maybe in upstream):

  -from collections import Sequence
   
   from dbus._compat import is_py2
  +if is_py2:
  +    from collections import Sequence
  +else:
  +    from collections.abc import Sequence

(That is what we have built in our copr for now.)


For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.9/fedora-rawhide-x86_64/01139990-dbus-python/

For all our attempts to build dbus-python with Python 3.9, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.9/package/dbus-python/

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.9:
https://copr.fedorainfracloud.org/coprs/g/python/python3.9/

Let us know here if you have any questions.

Python 3.9 will be included in Fedora 33, but the initial bootstrapping has already started.
A build failure this early in the bootstrap sequence blocks us very much.

Comment 1 Miro Hrončok 2020-02-05 00:41:32 UTC
Could you please have a look?

Comment 2 Ben Cotton 2020-02-11 17:19:46 UTC
This bug appears to have been reported against 'rawhide' during the Fedora 32 development cycle.
Changing version to 32.