Designing & Developing Python Applications

    From The Document Foundation Wiki
    This page is a translated version of the page Macros/Python Design Guide and the translation is 91% complete.

    소개

    이 페이지는 리프레오피스 응용프로그램을 설계하거나 공동 작업하려는 파이썬 매크로 개발자를위한 것입니다. 초보자부터 숙련된 파이썬 코더까지 이 페이지의 개발 지침을 활용할 수 있습니다. 리브레오피스에서 제공하는 파이썬은 Python Programmer 's Guide에서 확인할 수 있습니다.

    LibreOffice project에 대한 후보는 참여하려면이 위키에 말할 수 있습니다.

    이 페이지는 여러분이 LibreOffice 응용프로그램 제품군에 어느정도 익숙할 뿐만아니라 Python도 적당히 알고 있다고 가정합니다. 여기에는 간략하게 설명된 몇 가지 견본 Python 코드와 LibreOffice 확장 프로그램 사용법이 포함되어 있습니다.

    문서

    온라인 과정 및 안내

    e-참고문헌

    통합 모델링 언어 (UML)

    다양한 UML-기반 도구들을 사용할 수 있습니다. 다음은 그들의 특유 연어들을 언급하는 자유 오픈 소스 상호 운용 응용프로그램에 초점을 맞춘 임의의 목록입니다.

    • ArgoUML : ArgoUML은 모든 Java 플랫폼에서 실행되며 10가지 언어(American English, British English, French, German, Italian, Portuguese, Spanish, Russian, Norwegian Bokmål and Chinese)가 제공됩니다.
    • StarUML : StarUML은 macOS 10.6+, Windows XP+ 그리고 Ubuntu (64 or 32-bit)에 제안합니다.
    • Umbrello : 다중-언어 Umbrello는 GNU/Linux 배포판, Windows (64 or 32-bit) 그리고 macOS와 함께합니다.

    Unified Modeling Language (UML)도구의 광범위한 목록은 Wikipedia에서 제공합니다.

    StarOffice Programmer's Tutorial은 UML 다이어그램의 도움과 함께 리브레오피스 문서를 자세히 설명합니다.

    소프트웨어 디자인 패턴은 때에 따라 Python 예제와 함께, 위키백과에서 설명합니다.

    서문

    라이브러리로 Python 스크립트 관리하기

    Basic 언어 매크로 개발에는 Basic 매크로를 편집하고 디버깅하는 등의 작업을 수행할 수 있는 통합 개발 환경(IDE)이 함께 제공됩니다. Python 매크로를 작성하려면 여러분이 선택한 IDE를 구축하기 위하여 추가 구성 단계가 필요합니다. 그 대가로 여러분의 Python 개발 선호사항 또는 습관에 기반한 유연한 디자인 경험을 제공하게 됩니다. 이후에는 초급 사용자부터 고급 사용자까지를 위한 IDE 설정 안내사항입니다.

    Basic에서 라이브러리와 매크로를 다루는 것과 동등하게 Python에서 할 수는 없습니다. 하지만 Python 일반 모듈과 함수를 관리하는 것은 아주 가능하지만, Python 패키지를 구축하는 것은 리브레오피스 확장 또는 UNO 패키지를 생성하는 것으로 어느정도 해석됩니다. 이 페이지는 라이브러리를 위한 모듈 그리고 매크로를 위한 함수를 상호 호환적으로 사용합니다. Python의 문화적 사용방법을 더 잘 수용하기 위한 Python 용어가 선호될 수 있습니다.

    리브레오피스 스크립트는 그것이 개인용인지, 공유용인지 또는 문서에 포함용인지, 3가지 구별되는 방식을 가집니다. 그들의 유형에 따라서 그리고 플랫폼에 따라서, AOO 위키 기사매크로 언어로써 Python에 설명되는 다양한 위치에 보관되게 됩니다.

    Python 스크립트를 관리하기 위해 Windows 라이브러리나 GNU/Linux 파일 관리자 바로가기를 사용할 수 있습니다. 따라서 .py 파일은 그냥 드래그앤드롭을 사용해서 편성될 수 있습니다. 라이브러리 또는 파일 관리자 바로가기를 설정하는데 도움이되는 여러분의 환경에 따른 폴더 위치에 대한 설명은 AOO 위키 기사매크로 언어로써 Python에서 찾아볼 수 있습니다.

    Python 프로젝트는 그림과 같이 후속 Windows 라이브러리에서 IDE별로 정렬할 수 있습니다.

    대체 파이썬 스크립트 편성자 메뉴

    반드시 있어야 하는 Alternative Python Script Organizer 확장은 Python scripts management를 활용합니다. 그것을 설치하면 LibreOffice에서 더 나은 Python 스크립트 통합을 사용할 수 있습니다. LibreOffice를 다시 시작되면, Tools 메뉴의 Macros - Organize python script 하부 메뉴를 확인하십시오.

    이 확장 기능은 Python 스크립트를 관리하기 위한 다양한 작업을 제안합니다. Execute 버튼은 선택한 매크로를 실행합니다. Menu 버튼에서 사용할 수 있는 작업(Action)은 선택한 요소에 따라 다릅니다:

    대체 파이썬 스크립트 편성자 대화상자
    • 개인용, 공유용 또는 문서 컨테이너를 선택할 때마다 매크로 또는 라이브러리 만들기
    • 매크로 또는 라이브러리 편집, 이름바꾸기, 삭제.
    • 개인용 또는 공유용 컨테이너에서 문서로 매크로 포함.
    • 문서 내장 라이브러리를 플랫폼 Python 모듈로 대용
    • 문서 내장 라이브러리를 Python 모듈로 내보내기(export)
    • 선택한 매크로 Debug
    • Python 인터프리터로도 알려진 Python 대화용 콘솔을 실행

    스크립트 구성 및 Python 패키지와 관련한 기타 정보는 Debugging에서 확인할 수 있습니다.

    리브레오피스에서 스크립트 할당하기는 리브레오피스 응용프로그램 제품군에서 스크립트를 사용하는 방법을 자세히 설명합니다.

    개발하기

    수많은 응용프로그램들이 원래의 파이썬이나 특정 파이썬을 사용해 만듭니다. LibreOffice는 Universal Network Objects (UNO)를 통해 API를 사용하도록 허용하는 자체 Python 인터프리터가 포함되어 있습니다. Python 언어는 LibreOffice의 그것과 병행해서 사용될 수 있는 자체 인터프리터를 가지고 있습니다. 두가지 모두 공통 기반을 공유하며 확장가능하므로, 다른 것에서 제공하는 것과 마찬가지의 동일한 기능들을 제공합니다. 원래의 Python은 LibreOffice API를 위한 UNO 인터페이스를 포함하고 있지 않습니다. 반면, LibreOffice는 원래의 Python처럼 완전하게 동작하지 않으며 원래의 Python처럼 동일한 방식으로 그것의 기능들을 확장하지 않습니다. 하지만 LibreOffice 도 원래의 Python도 Writer, Calc, Impress, Draw, Base 또는 Math를 위한 Python 언어로 응용프로그램을 개발하는데 용이하지는 않습니다.

    LibreOffice는 32- 또는 64-bit 버전으로 존재합니다. 이것을 수용하는 통합 개발 환경(IDE)은 32- 또는 64-bit모두, 동일한 맥락으로 실행되는 것이 요구됩니다. 논쟁의 여지가 있지만, IDLE같은 가장 쉬운 것에서 부터, PyCharm 또는 EclipsePyDev와 같은 더 정교한 것까지 수많은 IDE들이 존재합니다. 다음 목록은 자유, 오픈 소스, 멀티 플랫폼 및 가능한 다국어 도구에 임의로 초점을 맞추고 있습니다. 아래 Debugging 챕터에서는 Pyzo와 PyCharm을 설명에만 사용합니다. Python을 위한 IDE들 목록은 Python.org 사이트에서 확인할 수 있습니다. 다양한 언어에 대한통합 개발 환경 비교(IDE)는 Wikipedia에서 제공합니다.

    • 통합 개발 및 학습 환경 (IDLE)은 32- 및 64-bit를 제공합니다. 이것은 많은 플랫폼에서 사용가능합니다. IDLE는 Python 학습에 권장 도구 입니다.
    • Geany는 32- 및 64-bit로 운용되며 43가지 서로 다른 언어로 사용가능합니다. 이것은 GNU/Linux, *BSD, macOS, AIX v5.3, Solaris Express 그리고 Windows에서 실행됩니다. Geany는 가볍고, 작은 프로젝트에 맞으며 LibreOffice Python interpreter를 지원합니다.
    • Liclipse
    • Aptana를 사용한 디버깅이 가능해 보입니다. 참조 이 쓰레드
    • PyCharm (free edition)은 Gnu/Linux, macOS 그리고 Windows 플랫폼을 지원합니다. 이것은 32bits로 사용가능하며, 또한 64bits을 분명히 수용합니다. PyCharm은 Python 개발에 수반되는 수많은 기능들과 함께 LibreOffice와 호환되는 Python 디버거를 보유하고 있습니다.
    • Pyzo10가지 다른 언어로 Linux, OS X 그리고 Windows에서 사용가능합니다. 32bits 또는 64bits와 같이 여러 개의 Python 인터프리터를 구성할 수 있습니다. Pyzo는 디버깅 기능을 제공합니다.

    다음은 이러한 IDE에서 사용할 수 있는 기능 목록입니다. LibreOffice Basic IDE는 일부 기능을 제공하지 않습니다.

    소스 탐색기, 구문 강조표시

    IDLE, Geany 및 PyCharm 내의 소스 탐색 및 구문 강조는 스크립트 에디션을 용이하게 합니다. Geany와 PyCharm은 코드 접기를 지원합니다. IDLE 클래스 브라우저는 내부 클래스나 임베디드 클래스를 지원하지 않습니다.

    코드 완성

    코드 완성은 IDLE, Geany 그리고 PyCharm에서 Python 스크립트의 편집을 지원합니다.

    디버깅

    Debugging장 다음은 이 주제에 대해 자세히 설명합니다.

    코딩 지침 (PEP)

    PyCharm IDE는 PEP(Python Enhancement Proposal) 준수 검사를 표시합니다.

    PyCharm 코딩 규칙 도우미

    파이썬 코딩 규칙 및 권장 사항은 편집기의 가장 오른쪽 부분에서 사용할 수 있습니다. 이것은 경험이 없는 프로그래머에게 특히 편리합니다.

    TDD(Test-Driven Development) - 초안

    </Unit testing>

    버전 제어

    소스 코드 로컬 히스토리는 아래 그림과 같이 PyCharm과 함께 제공됩니다:

    소스 코드 업데이트 로컬 이력

    apso.py Python 모듈의 두 복사본이 공동으로 표시되며 각각 v0.8.3 및 v0.8.7로 레이블이 지정됩니다. 버전 차이가 정확하게 강조됩니다.

    PyCharm은 Git, GitHub, Mercurial, Perforce or Subversion과 같은 다른 version control solutions (VCS)를 제공합니다.

    디버깅

    리브레오피스에서 테스트

    Xray - Writer 텍스트 객체 메서드
    MRI - Writer 문서에 대한 속성, 메서드, 서비스 및 인터페이스
    객체 검사기 - 'StarDesktop' 속성, 메서드, 서비스 및 내보내기 인터페이스 지원

    Alternative Python Script Organizer 확장프로그램의 도움을 받아 LibreOffice 안에서 직접 Python 매크로를 편집 디버그할 수 있습니다. 라이브러리 및 모듈 관리는 물론 LibreOffice를 떠나지 않고도 선호하는 편집기를 선택할 수 있습니다.

    LibreOffice의 개발도 마찬가지로 가능하므로, 디버깅도 가능합니다. 통합 개발 환경(IDE)을 사용한 원격 코딩 및 테스트는 이후에 더 자세한 기능을 제공합니다.

    다음은 두가지 맥락에서 이득을 얻을 수 있는 프포그래머를 위한 세가지 확장프로그램입니다. LibreOffice Basic, Python, JavaScript 또는 BeanShell 등 프로그래밍 언어에 관계없이 사용할 수 있습니다. 세 가지 모두 LibreOffice 제품군에서 APIintrospection(내성)을 확장합니다.

    쓸만한 확장 프로그램

    설계시에 실제 지원하는 UNO 객체 서비스가 항상 명확하지 않습니다. 하지만 임의의 UNO-Object를 검출하는데 개발자에게 도움을 주는 확장프로그램이 존재하지만, MRI를 제외하면, 확장프로그램 카타로그에서 사용불가능합니다. 확장프로그램은 LibreOffice API reflection(반영) 능력을 기반으로 구축되었습니다.

    • X-Ray는 LibreOffice API 객체를 검사합니다. 이는 객체 변수가 제공하는 속성, 메서드, 서비스, 인터페이스를 표시합니다. X-Ray는 프랑스어, 영어, 독일어, 스페인어, 체코어, 폴란드어, 그리고 러시아어로 사용가능합니다. X-Ray는 Basic으로 작성되었습니다.
    • MRI (My Reflection and Introspection)은 Python으로 작성된, UNO 객체의 introspection(유형이나 속성을 검사하는) 도구 입니다. 이것의 기능은 X-Ray와 비슷합니다. MRI는 영어로만 사용가능합니다. 주의: 확장 카타로그 MRI 사본은 오래된 것입니다.
    • Object Inspector 확장은 TreeView창에 모든 지원 서비스들, 내보내기 인터페이스들, 각각의 메서드들, 속성들과 같은 UNO-object의 전체 역량을 표시합니다. 객체 검사기는 Java로 작성되었으며 영어로만 사용가능합니다.
    • APSO The Alternate Python Script Organizer(대체 파이썬 스크립트 편성자)확장 프로그램은 그 디버거에 객체 검사를 멋지게 통합합니다. 이것은 X-Ray나 MRI를 사용합니다.

    Python 매크로의 사용

    LibreOffice의 Python 매크로는 다양한 위치에 보관되며 매크로 언어로써 파이썬에서 설명되듯이 다양한 종류로 제공됩니다. 스크립트는 personal(개인용), shared(공유용), 확장프로그램에 보관(stored)용, 그리고 패키지에 통합(integrated)용 또는 문서에 포함(embedded)용이 있을 수 있습니다. 이러한 다양성은 묵시적으로 다른 용도 또는 제약을 의미합니다.

    • 문서에서 각 모듈은 모듈 가져오기없이, 자율적입니다. 이를 방지하려면 Python import online/local 도움말을 참조하십시오.
    • 포함된 모듈에서 Basic 또는 Python 확장을 호출하는 것이 가능합니다.
    • <usr>\python\pythonpath의 Python 스크립트는 포함된 모듈 또는 <user>\python script로 가져오가 할 수 있습니다.
    • IDE에서 지원하는 Basic 없음: X-Ray 없음

    Basic 유무는 IDE에 수립된 브리지 유형에 따라 다릅니다.

    • Python 및 Java는 IDE에서 호출할 때 지원됩니다. MRI, Object Inspector이 사용될 수 있습니다.

    다음은 Python 매크로에서 MRI를 사용하는 방법입니다.

    import uno
    def mri(target):
        ctx = uno.getComponentContext()
        mri = ctx.ServiceManager.createInstanceWithContext(
            "mytools.Mri",ctx)
        mri.inspect(target)
        
    if __name__ == '__main__':
        def Mri_test():
            document = XSCRIPTCONTEXT.getDocument()
            mri(document)
     
        Mri_test()

    X-Ray를 사용하여 실행 중인 매크로 중단시키기:

    import uno
    from com.sun.star.uno import RuntimeException as _rtex
    
    def xray(myObject):
      try:
        sm = uno.getComponentContext().ServiceManager
        mspf = sm.createInstanceWithContext("com.sun.star.script.provider.MasterScriptProviderFactory", uno.getComponentContext())
        scriptPro = mspf.createScriptProvider("")
        xScript = scriptPro.getScript("vnd.sun.star.script:XrayTool._Main.Xray?language=Basic&location=application")
        xScript.invoke((myObject,), (), ())
        return
      except:
         raise _rtex("\nBasic 라이브러리 Xray가 설치되지 않았습니다.", uno.getComponentContext())
    
    # ___________  사용 예  _______________ 
    
    def demoXray(): 
      """ 예제: Writer 문서에서 xray 사용 """ 
      
      xTextDoc = XSCRIPTCONTEXT.getDocument() 
      xText = xTextDoc.Text 
      xray(xText)
      xray("<span lang="en" dir="ltr" class="mw-content-ltr">Demo is finished</span>") 
    
    g_exportedScripts = demoXray,

    객체 검사기를 사용해서 트리 뷰에 UNO 객체 표시하기:

    import uno
    def inspectObject( obj, title="객체 검사기:" ):
    	ctx = uno.getComponentContext()
    	oi = ctx.ServiceManager.createInstanceWithContext("org.openoffice.InstanceInspector", ctx)
    	if oi is None:  # 즉. 인스턴스인스펙터가 설치되지 않아거나 비활성중입니다.
    		return  # <span lang="en" dir="ltr" class="mw-content-ltr">exit silently</span>
    	oi.inspect( obj, title )
    def exObjInspector():
    	doc = XSCRIPTCONTEXT.getDocument()
    	dsk = XSCRIPTCONTEXT.getDesktop()
    	inspectObject(doc)
    	inspectObject(dsk, title="StarDesktop")

    LibreOffice Python 인터프리터를 통한 IDE에서

    IDE 내에서 Python 매크로를 개발하는 것은 LibreOffice 인터프리터의 사용이 필요합니다. 원래의 Python은 UNO 객체와 호환되지 않는 IDLE의 인터프리터가 있지만 Python IDE 프로그래머를 선택하면 클래스 탐색기, 구문 강조표시, 코드 완성, 코딩 표준 규칙시행, 테스트 기반 개발, 디버깅, 버전 제어 그리고 다양한 기능과 같은 다수의 기능 혜택을 얻습니다.

    Geany, PyCharm 또는 Pyzo를 위한 LibreOffice Python interpreter의 설정은 Python IDE Basics에서 설명합니다.

    <user>\python 또는 <user>\python\pythonpath에서 스크립트를 실행하려면, 반드시 IDE와 LibreOffice 간에 통신(communication)을 설정해야 합니다. 이러한 브리지 없이는 UNO 개체에 도달할 수 없습니다. 적합하게 통신이 이루어지면 IDE와 LibreOffice가 함께 작동(operate)합니다. 다음은 해당 프로세스가 있는 문서를 연결 합니다.

    IDE_utils 모듈은 이러한 리소스를 차용하여 LibreOffice [Macros/Python_Basics|Python macro simple enable for IDEs]를 제공합니다.

    파이썬 스크립트의 사용

    • ...Python packages 호출하기...

    Geany를 사용한 외부 실행

    Geany는 LibreOffice 내에 창을 엽니다. Geany EDI는 SDK에 정의된 ...awt.createMessageBox API 메서드를 사용하는 info() 함수를 호출합니다. 사용자 스크립트의 이름은 SysInfo.py 입니다.

    Geany는 SDK에 정의된 ...awt.createMessageBox() API 메서드를 호출하는 info () 함수를 실행합니다. 스크립트 이름은 <user>\SysInfo.py 입니다

    PyZo를 사용한 디버깅

    PyUNO Workspace는 PyUNO 및 LibreOffice UNO API용 객체 인트로스펙션 Pyzo IDE 플러그인입니다:

    Pyzo는 <user>\..\IDE_utils.py로 실행하고 멈춥니다
    Pyzo는 <user>\..\IDE_utils.py로 실행하고 멈춥니다.

    PyCharm을 사용해서 디버깅하기

    PyCharm의 디버거는 UNO 객체, Python 클래스 또는 객체를 표시합니다:

    UNO 객체, Python 클래스 또는 변수 감시하기

    APSO를 사용해서 디버깅하기

    대체 파이썬 스크립트 편성자(APSO) 확장프로그램은 xRay 또는 MRI를 사용하여 스택 추적 표시 및 UNO 객체 instrospection과 마찬가지로 단계별 실행을 허용합니다.

    APSO 디버그 창

    콘솔로의 출력

    Python 스크립트는 Python shell과 REPL(Read Execute Print Loop) 프로세스 사용으로 prototyped(모형화)할 수 있습니다. 대체 파이썬 스크립트 편성자(APSO)는 LibreOffice Python의 일부인, 이 설비에 통합됩니다.

    APSO console

    Python 대화형 콘솔

    Python 인터프리터 또는 Python shell로도 알려진, Python interactive console는 프로그래머에게 명령을 실행하고, 파일을 생성하지 않고 테스트 코드를 실험하고 사용해보는 빠른 방법을 제공합니다. LibreOfficeDev Python 모듈 문서와 마찬가지로 UNO 객체 인트로스펙션은 터미널에서 얻을 수 있습니다. LibreOffice online/local은 Python 대화식 콘솔을 실행하는 방법을 상세히 설명합니다.

    Python shell

    Windows에서 Console

    기본적으로 Windows에는 기본 stdout이 없습니다. 기능 "print"에 의해 전송되는 것은 어디에서도 볼 수 없습니다. stdout으로 사용할 콘솔을 가져오려면:

    • soffice.exe 대신 soffice.com를 사용해서 LibreOffice를 시작하십시오:

    Python 스크립트 print() 문은 LibreOffice를 닫을 때까지 콘솔에 나타냅니다. 콘솔이 없는 경우, print() 문은 침묵합니다.

    source: Windows에서 LibreOffice를 위한 적절한 콘솔 모드

    다음은 LibreOffice 6.3 출시 부터 사용할 수 있습니다. 이 출시판 이전은 다음 치짐에 따르십시오:

    1. LibreOffice를 닫습니다.
    2. Visual Studio Express 2010 C++ (나는 다른버전에서 동작한다고 가정합니다)를 다운로드해서 설치하십시오.
    3. Visual Studio를 위한 콘솔을 여십시오.
    4. 입력하십시오:

    editbin.exe /subsystem:console "C:\Program Files\LibreOffice 5\program\soffice.exe"
    editbin.exe /subsystem:console "C:\Program Files\LibreOffice 5\program\soffice.bin"

    참조. TechNet에 EditBin 참조

    이제, LibreOffice를 열면 콘솔이 표시됩니다. "print" 명령에 대한 stdout이 되게 됩니다. 그리고 역추적(traceback)을 사용하면 LO가 실행되는 동안 Python 오류가 발생할 수 있습니다.

    import traceback
    […]
    try:
        […]
        except:
            traceback.print_exc()

    그러나 구문 오류는 여전히 보고되지 않습니다.

    source: [Python] Errors report - 디버깅 구성

    예외 다루기 -초안

    대화상자 구축하기 - 초안

    참조. UNODiT UNO Dialog Tools 아래에 나열된 몇 가지 참고 문헌을 찾아 보십시오:

    대화상자 설계하기

    이벤트 기반 매크로

    이벤트 서비스, DocumentEvent, XDocumentEventBroadcaster

    지역화

    Dispatcher commands - draft

    *Office에서 인터페이스-지향 프로그래밍, Christopher Bourez (2015)

    확장프로그램 생성하기 - 초안

    Extensions

    확장_개발

    확장프로그램 관리

    UNO component packaging - 파이썬 구성요소 테스트

    대화상자 컨트롤에 의해 생성된 이벤트 용인

    서비스 구축하기

    Calc Add-in 구축하기

    Building and Extension

    Miscellaneous - draft

    Document module import

    cf. Importing Python modules in online help

    Python package vs. LibreOffice Extension

    (cf. french draft version up to now)

    Static Properties or Methods

    Q: How about the behaviour of Python global attribute?

    Using Git with PyCharm - draft