Uvažanje modulov Python

Skripti Python v LibreOffice so treh različnih vrst: lahko so osebni, v skupni rabi ali vdelani v dokumente. Shranjeni so na različnih mestih, opisanih v Organizacija in mesto skriptov v Pythonu. Da bi uvozili module Python, morajo biti njihova mesta znana iz Pythona v času izvajanja.

Ta mehanizem je ponazorjen za datotečni sistem, ki temelji na modulih in na dokumentih temelječih modulih. Obravnavanje izjem je zaradi jasnosti izpuščeno. Izraza knjižnica ali mapa, skripte ali moduli so zamenljivo uporabljeni. Makro Python se nanaša na funkcijo znotraj modula.

warning

Upoštevajte, da je krajevna mapa <Uporabniški profil>/Scripts/Python/pythonpath vedno preiskana, ko zaganjate makro Python iz <Uporabniški profil>/Scripts/Python.


Uvoz modula File System

Knjižnice LibreOffice Basic vsebujejo razrede, procedure in spremenljivke, moduli Python pa vsebujejo razrede, funkcije in spremenljivke. Skupne kose ponovno uporabnih funkcionalnosti Python ali UNO je potrebno shraniti v Moje makre v <User Profile>/Scripts/python/pythonpath. Knjižnice Python so priročne za organizacijo modulov, da preprečite spore z imeni modulov. Uvozite uno.py v module za skupno rabo.

Uporabniški ali skupni moduli

Osebni in skupni skripti Python lahko uvozite, ko so njihove mape vključene v zagonsko pot Pythona. Glejte stran Pridobivanje informacij o sejiza podrobnosti o izpuščenem razredu Session.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts  # Mesto skriptov uporabnika
        if not user_lib in sys.path:
            sys.path.insert(0, user_lib)  # Dodaj v pot iskanja
        import screen_io as ui  # Modul ‘screen_io. py ' prebiva v mapi user_lib
        # Tukaj sledi vaša koda
    

Ta primer Python izpostavi lokalno spremenljivko XSCRIPTCONTEXT uvoznemu modulu:


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts()  # Mesto skriptov v skupni rabi
        if not share_lib in sys.path:
            sys.path.insert(0, share_lib)  # Dodaj v iskalno pot
        from IDE_utils import ScriptContext  # "IDE_utils. py" sedi s skupnimi skripti Python.
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # Tukaj sledi vaša koda
    

Namestitveni moduli za programe

Za razliko od osebnih in v skupnih skriptov lahko skripte za namestitev LibreOffice uvozite kadar koli. Poleg modulov LibreOffice Python uno in unohelper lahko druge skripte iz mape <pot_namestitve>/program uvozite neposredno, kot npr. modul msgbox.

V lupini Pythona:

>>> import msgbox, uno

>>> myBox = msgbox.MsgBox(uno.getComponentContext())

>>> myBox.addButton("okay")

>>> myBox.renderFromButtonSize()

>>> myBox.numberOflines = 2

>>> print(myBox.show("A small message",0,"Dialog title"))

Uvoz modula Document

Uvažanje v dokument vdelanega modula Python je prikazano spodaj. Obravnavanje napak ni podrobno opisano. Pot izvajanja Pythona je posodobljena, ko je dokument odprt in preden ga zapremo. Če želite izvedeti, kako povezati makre Python za dokumentiranje dogodkov, glejte makre, ki temeljijo na dogodku.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno
            
        def OnDocPostOpenLoadPython():
            """ Pripravi uvoz modulov Python, ko se naloži dokument """
            PythonLibraries.loadLibrary('lib/subdir')  # Dodaj mapo v iskalno pot
            PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Dodaj mapo in uvozi screen_io
            
        def OnDocQueryCloseUnloadPython():
            """ Počisti PYTHON_PATH, ko se dok. zapre """
            PythonLibraries.unloadLibrary(‘my_gui’)  # Čiščenje poti izvajanja Pythona
            # Opomba: uvoženi moduli ostanejo v tem primeru naloženi.
            
        class PythonLibraries():
            """ Nalagalnik knjižnic in uvoznik modulov Python
            
            prirejeno po »Bibliothèque de fonctions« avtorja Huberta Lamberta
            na naslovu https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
            def isImportedModule(module_name: str) -> bool:
                """ Preveri seznam modulov ob izvajanju """
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ Preveri vsebino PYTHON_PATH """
                return (lib_name in sys.path)
            def loadLibrary(lib_name: str, module_name=None):
                """ Dodaj mapo v PYTHON_PATH, uvozi imenovani modul """
                doc = XSCRIPTCONTEXT.getDocument()
                url = uno.fileUrlToSystemPath(
                    '{}/{}'.format(doc.URL,'Scripts/python/'+lib_name)
                if not url in sys.path:
                    sys.path.insert(0, url)
                if module_name and not module_name in sys.modules.keys():
                    return zipimport.zipimporter(url).load_module(module_name)
            def unloadLibrary(lib_name: str):
                """ Odstrani mapo iz PYTHON_PATH """
                sys.path.remove(lib_name)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)
    

Podprite nas!