使用py2exe的python lxml

3 投票
1 回答
982 浏览
提问于 2025-04-17 16:44

我用DOM生成了一个XML文件,现在想用lxml来美化这个XML的格式。

这是我用来美化XML的代码:

def prettify_xml(xml_str):

   import lxml.etree as etree
   root = etree.fromstring(xml_str)
   xml_str =  etree.tostring(root, pretty_print=True)

   return xml_str

我希望输出的是一个格式化好的XML字符串。

这段代码是我从StackOverflow的某个帖子上找到的。在我直接用Python编译的时候,这段代码运行得很好。但是当我把项目转换成用py2exe生成的可执行文件(我的可执行文件是一个带有命名管道的Windows服务)时,我遇到了两个问题:

  1. 我的服务没有启动,我通过在py2exe函数的includes选项中添加lxml.etree来解决这个问题。这样我的服务就能正常启动了。

  2. 当调用XML生成时,我在日志中看到的错误是:'module' object has no attribute 'fromstring'

我该如何修正这个错误?我的第一个问题的解决方案是否正确?

我的XML生成代码:

from xml.etree import ElementTree
from xml.dom import minidom
from xml.etree.ElementTree import Element, SubElement, tostring, XML 
import lxml.etree 


    def prettify_xml(xml_str):

      root = lxml.etree.fromstring(xml_str)
      xml_str =  lxml.etree.tostring(root, pretty_print=True)

      return xml_str

   def dll_xml(status):
    try:
        xml_declaration = '<?xml version="1.0" standalone="no" ?>'

        rootTagName='response'
        root = Element(rootTagName)
        root.set('id' , 'rp001')

        parent = SubElement(root, 'command', opcode ='-ac')

        # Create children
        chdtag1Name = 'mode'
        chdtag1Value = 'repreport'

        chdtag2Name='status'
        chdtag2Value = status

        fullchildtag1 = ''+chdtag1Name+' value = "'+chdtag1Value+'"'
        fullchildtag2=''+chdtag2Name+' value="'+chdtag2Value+'"'

        children = XML('''<root><'''+fullchildtag1+''' /><'''+fullchildtag2+'''/></root> ''')

        # Add parent
        parent.extend(children)
        dll_xml_doc = xml_declaration + tostring(root)

        dll_xml_doc = prettify_xml(dll_xml_doc)

        return dll_xml_doc

    except Exception , error:
       log.error("xml_generation_failed : %s" % error)

1 个回答

1

试着用 PyInstaller 来代替 py2exe。我只需运行 python pyinstaller.py YourPath\xml_a.py 就顺利把你的程序转换成了二进制的 .exe 文件,没遇到任何问题。

撰写回答