Bug 1788491 - dbus-python fails to build with Python 3.9
Summary: dbus-python fails to build with Python 3.9
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: dbus-python
Version: rawhide
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Alternative GTK desktop environments
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: PYTHON39
TreeView+ depends on / blocked
 
Reported: 2020-01-07 11:17 UTC by Miro Hrončok
Modified: 2020-02-12 10:00 UTC (History)
13 users (show)

Fixed In Version: 1.2.16-1.fc32, 1.2.16-1.fc33
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2020-02-12 10:00:51 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

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.


Note You need to log in before you can comment on or make changes to this bug.