Я пытаюсь использовать pptx-python в Google App Engine (для создания файла PowerPoint). Мне не нужны изображения, поэтому я просто прокомментировал зависимости от подушки. Это оставило меня с чем-то, что почти работает, за исключением того, что у меня проблема с версией. Версия lxml в GAE равна 2,3, и, по-видимому, метод SubElement был добавлен в версии 2.3.2.Мне нужен полипол для objectify.SubElement
Код pptx красиво обертывает вызовы lxml, поэтому, похоже, я мог обойти это, переписав SubElement на уровне приложения. К сожалению, у меня действительно нет первой подсказки, как это сделать. И код lxml, по-видимому, просто является оболочкой python вокруг написанного на C. Итак, прежде чем я потрачу пару дней на скорость на lxml, я надеюсь, что один из вас гениев может мне помочь.
Это код в PPTX/oxml/shared.py:
def SubElement(parent, nsptag_str, **extra):
"""
Return an lxml element having *nsptag_str*, newly added as a direct child
of *parent*. The new element is appended to the sequence of children, so
this method is not suitable if the child element must be inserted at a
different position in the sequence. The class of the returned element is
the custom element class for its tag, if one is defined. Additional
named parameters defined on lxml ``makeelement()`` are accepted, such as
attrib=attr_dct and e.g. ``visible='1'``.
"""
nsptag = NamespacePrefixedTag(nsptag_str)
return objectify.SubElement(
parent, nsptag.clark_name, nsmap=nsptag.nsmap, **extra
)
Может кто-нибудь сказать мне, как переписать эту функцию, чтобы она не опирается на objectify.SubElement, а вместо этого использует только методы доступно в lxml 2.3?
Добавлена возможность перезаписи SubElement() в случае, если это окажется более удобным. – scanny
Я добавил этот код и сменил кучу мест, которые прошли cleanup_namespaces = True, вместо этого используйте lxml.etree.cleanupnamespaces: '' etree.cleanup_namespaces (txBody) objectify.deannotate (txBody) #, cleanup_namespaces = True) '' и это сделал трюк! –