gpt4 book ai didi

python - 我需要一个用于 objectify.SubElement 的 polyfill

转载 作者:太空宇宙 更新时间:2023-11-04 03:44:02 27 4
gpt4 key购买 nike

我正在尝试在 Google App Engine 上使用 pptx-python(创建一个 powerpoint 文件)。我不需要图像,所以我只是注释掉了对 Pillow 的依赖。这给我留下了一些几乎可以工作的东西,除了我有一个版本问题。 GAE中lxml的版本是2.3,显然SubElement方法是在2.3.2版本中添加的。

pptx 代码很好地包装了 lxml 调用,所以看起来我可以通过在应用程序级别重写 SubElement 来解决这个问题。不幸的是,我真的不知道如何做到这一点。而且 lxml 代码似乎只是用 C 语言编写的东西的 python 包装器。所以在我花几天时间来加快 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 中可用的方法?

最佳答案

GitHub 上 python-pptx 的开发分支有 SubElement,实际上所有 lxml.objectify 都被移除以支持 lxml.etree 库调用。长话短说,但在大规模使用时,objectify 带来的麻烦远远超过了它的值(value)。

所以如果你可以从 develop 分支安装这个问题可能会消失。 develop 分支与 master 分支一样稳定,此时它们都得到大约 1,000 个单元测试和 175 个集成/验收测试的支持。

这就是我要开始的地方。让我们知道您的进展情况:)

实际上,现在我想到了,虽然我更喜欢上面的方法,因为这意味着你不必固定你的 python-pptx 版本,这可能会成功:

def SubElement(parent, nsptag_str, **extra):
nsptag = NamespacePrefixedTag(nsptag_str)
nsmap = nsptag.nsmap
element = oxml_parser.makeelement(nsptag.clark_name, nsmap=nsmap, **extra)
parent.append(element)
return element

关于python - 我需要一个用于 objectify.SubElement 的 polyfill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24705582/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com