Note: This is a public test instance of Red Hat Bugzilla. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback at bugzilla.redhat.com.
Bug 1845744 - python3-openpyxl requires xml.etree.cElementTree which has been deprecated, removed from Python 3.9
Summary: python3-openpyxl requires xml.etree.cElementTree which has been deprecated, r...
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: python-openpyxl
Version: rawhide
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Julien Enselme
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: PYTHON39 1843783
TreeView+ depends on / blocked
 
Reported: 2020-06-09 23:56 UTC by Mark Goodwin
Modified: 2020-06-16 21:04 UTC (History)
4 users (show)

Fixed In Version: python-openpyxl-3.0.3-1.fc33
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2020-06-16 21:04:30 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Mark Goodwin 2020-06-09 23:56:02 UTC
Description of problem: can't import openpyxl


Version-Release number of selected component (if applicable): python3-openpyxl-2.6.2-6.fc33.noarch


How reproducible: easily


Steps to Reproduce:
1. in a rawhide VM or chroot
2. python3 -c 'import openpyxl'
3.

Actual results: exception ModuleNotFoundError: No module named 'xml.etree.cElementTree'


Expected results: no exception


Additional info: https://docs.python.org/3.9/whatsnew/3.9.html#removed

"The xml.etree.cElementTree module has been removed, use the xml.etree.ElementTree module instead. Since Python 3.3 the xml.etree.cElementTree module has been deprecated, the xml.etree.ElementTree module uses a fast implementation whenever available."

According to mhroncok in BZ#1843783 :
/usr/lib/python3.9/site-packages/openpyxl/xml/functions.py


And the problem is, it has:

    from lxml.etree import XMLSyntaxError

    if DEFUSEDXML is True:
        from defusedxml.common import DefusedXmlException
        from defusedxml.cElementTree import iterparse
        from defusedxml.lxml import fromstring as _fromstring, tostring

        def fromstring(*args, **kwargs):
            try:
                return _fromstring(*args, **kwargs)
            except XMLSyntaxError as e:
                raise DefusedXmlException(str(e))
    else:
        from lxml.etree import fromstring, tostring
        from xml.etree.cElementTree import iterparse
        # do not resolve entities
        safe_parser = XMLParser(resolve_entities=False)
        fromstring = partial(fromstring, parser=safe_parser)

else:
    try:
        from xml.etree.cElementTree import (
        ElementTree,
        Element,
        SubElement,
        QName,
        register_namespace
        )
        if DEFUSEDXML is True:
            from defusedxml.cElementTree import (
            fromstring,
            tostring,
            iterparse,
            )
        else:
            from xml.etree.cElementTree import (
            fromstring,
            tostring,
            iterparse
            )
    except ImportError:
        from xml.etree.ElementTree import (
        ElementTree,
        Element,
        SubElement,
        QName,
        register_namespace
        )
        if DEFUSEDXML is True:
            from defusedxml.ElementTree import (
            fromstring,
            tostring,
            iterparse,
            )
        else:
            from xml.etree.ElementTree import (
            fromstring,
            tostring,
            iterparse,
            )
    from et_xmlfile import xmlfile





So it only fails if I install lxml:



<mock-chroot> sh-5.0# rpm -q python3-lxml
python3-lxml-4.5.1-1.fc33.x86_64


<mock-chroot> sh-5.0# python3 -c 'import openpyxl'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.9/site-packages/openpyxl/__init__.py", line 6, in <module>
    from openpyxl.workbook import Workbook
  File "/usr/lib/python3.9/site-packages/openpyxl/workbook/__init__.py", line 5, in <module>
    from .workbook import Workbook
  File "/usr/lib/python3.9/site-packages/openpyxl/workbook/workbook.py", line 8, in <module>
    from openpyxl.worksheet.worksheet import Worksheet
  File "/usr/lib/python3.9/site-packages/openpyxl/worksheet/worksheet.py", line 30, in <module>
    from openpyxl.cell import Cell, MergedCell
  File "/usr/lib/python3.9/site-packages/openpyxl/cell/__init__.py", line 4, in <module>
    from .cell import Cell, WriteOnlyCell, MergedCell
  File "/usr/lib/python3.9/site-packages/openpyxl/cell/cell.py", line 46, in <module>
    from openpyxl.utils.inference import (
  File "/usr/lib/python3.9/site-packages/openpyxl/utils/inference.py", line 10, in <module>
    from openpyxl.styles import numbers
  File "/usr/lib/python3.9/site-packages/openpyxl/styles/__init__.py", line 5, in <module>
    from .alignment import Alignment
  File "/usr/lib/python3.9/site-packages/openpyxl/styles/alignment.py", line 6, in <module>
    from openpyxl.descriptors import Bool, MinMax, Min, Alias, NoneSet
  File "/usr/lib/python3.9/site-packages/openpyxl/descriptors/__init__.py", line 5, in <module>
    from .sequence import Sequence
  File "/usr/lib/python3.9/site-packages/openpyxl/descriptors/sequence.py", line 5, in <module>
    from openpyxl.xml.functions import Element
  File "/usr/lib/python3.9/site-packages/openpyxl/xml/functions.py", line 40, in <module>
    from xml.etree.cElementTree import iterparse
ModuleNotFoundError: No module named 'xml.etree.cElementTree'



Also fails with both lxml and defusedxml:


<mock-chroot> sh-5.0# python3 -c 'import openpyxl'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.9/site-packages/openpyxl/__init__.py", line 6, in <module>
    from openpyxl.workbook import Workbook
  File "/usr/lib/python3.9/site-packages/openpyxl/workbook/__init__.py", line 5, in <module>
    from .workbook import Workbook
  File "/usr/lib/python3.9/site-packages/openpyxl/workbook/workbook.py", line 8, in <module>
    from openpyxl.worksheet.worksheet import Worksheet
  File "/usr/lib/python3.9/site-packages/openpyxl/worksheet/worksheet.py", line 30, in <module>
    from openpyxl.cell import Cell, MergedCell
  File "/usr/lib/python3.9/site-packages/openpyxl/cell/__init__.py", line 4, in <module>
    from .cell import Cell, WriteOnlyCell, MergedCell
  File "/usr/lib/python3.9/site-packages/openpyxl/cell/cell.py", line 46, in <module>
    from openpyxl.utils.inference import (
  File "/usr/lib/python3.9/site-packages/openpyxl/utils/inference.py", line 10, in <module>
    from openpyxl.styles import numbers
  File "/usr/lib/python3.9/site-packages/openpyxl/styles/__init__.py", line 5, in <module>
    from .alignment import Alignment
  File "/usr/lib/python3.9/site-packages/openpyxl/styles/alignment.py", line 6, in <module>
    from openpyxl.descriptors import Bool, MinMax, Min, Alias, NoneSet
  File "/usr/lib/python3.9/site-packages/openpyxl/descriptors/__init__.py", line 5, in <module>
    from .sequence import Sequence
  File "/usr/lib/python3.9/site-packages/openpyxl/descriptors/sequence.py", line 5, in <module>
    from openpyxl.xml.functions import Element
  File "/usr/lib/python3.9/site-packages/openpyxl/xml/functions.py", line 30, in <module>
    from defusedxml.cElementTree import iterparse
  File "/usr/lib/python3.9/site-packages/defusedxml/cElementTree.py", line 13, in <module>
    raise ImportError("cElementTree has been removed from Python 3.9")
ImportError: cElementTree has been removed from Python 3.9


This is a bug in openpyxl. It only happens when python3-lxml is installed.
This bug is preventing the PCP package from being built in rawhide (it has a builddep on python3-openpyxl).

Thanks

Comment 1 Miro Hrončok 2020-06-10 15:59:10 UTC
See also https://github.com/python/cpython/pull/20780 -- the removal will be reverted.

Comment 2 Charalampos Stratakis 2020-06-16 21:04:30 UTC
Fixed via updating to 3.0.3


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