2013-02-22 2 views
3

나는 dom으로 XML을 생성했으며, xml을 출력하기 위해 lxml을 사용하고자한다. 꽤 XML을파이썬 lxml with py2exe

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에에서 만든 바이너리 내 프로젝트를 변환 할 때 .I이 두 가지 문제가 있었다 (내 바이너리는 명명 된 파이프와 윈도우 서비스입니다) : 내 서비스가 시작되지 않았습니다

  1. , 난 includes 옵션에 lxml.etree을 추가하여이 문제를 해결

    py2exe 함수에서. 그때 내 서비스가 제대로 시작되었습니다. XML 생성에서 여기라는

  2. , 나는 내 로그 내가이 오류를 해결 할 '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 버전을 사용하고 있습니까? –

+0

함수 밖에서 가져 오기를 시도했습니다. 내 서비스가 지금 시작되지 않았습니다. 나는 내 코드를 – rakesh

+0

@ michael-clerx 위에 놓을 수도있다. 나는 내 python 버전과 py2exe 버전을 chaecked했다. 둘 다 같은 유형이다. – rakesh

답변

1

시도 대신 py2exe의 PyInstaller을 사용합니다. python pyinstaller.py YourPath\xml_a.py을 실행하여 문제없이 프로그램을 바이너리 .exe로 변환했습니다.