python lxml与py2exe

问题描述:

我已经用dom生成了一个XML,我想用lxml来打印xml。python lxml与py2exe

这是我的代码打印这个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格式的字符串。

我从stctoverflow的某篇文章中得到了这段代码。当我编译智慧python本身时,这工作完美无瑕。但是,当我在我的项目转换为从py2exe创建一个二进制文件(我的二进制是一个namedpipe窗口服务)。我有两个问题:

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

  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) 
+0

如果您将导入移动到方法定义之外,是否仍然发生?你确定py2exe使用的是你正在测试的python版本吗? – 2013-02-22 09:38:48

+0

我试着把功能外的导入。我的服务现在没有开始。我不妨将我的代码放在 – rakesh 2013-02-22 09:49:28

+0

@ michael-clerx之上,我查阅了我的python版本和py2exe版本,它们都是相同的类型。 – rakesh 2013-02-22 10:39:54

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