python lxml与py2exe

时间:2013-02-22 09:34:13

标签: python xml-parsing lxml py2exe

我用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格式的字符串。

我从stactoverflow中的一些帖子中获取了此代码。当我编译机智python本身时,这完美无缺。但是当我将我的项目转换为从py2exe创建的二进制文件时(我的二进制文件是带有namedpipe的windows服务)。我有两个问题:

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

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

  3. 我在哪里纠正这个错误?我的第一个问题的解决方案是否正确?

    我的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 个答案:

答案 0 :(得分:1)

尝试使用PyInstaller代替py2exe。我只是通过运行python pyinstaller.py YourPath\xml_a.py将您的程序转换为二进制.exe而没有任何问题。