Python: Module importować

Wobsah

# Module Python importować

Skripty Python LibreOfficeDev su w třoch rozdźělnych wariantach: móža priwatne, zhromadnje wužite abo do dokumentow zasadźene być. Składuja so na rozdźělnych městnach, kotrež so w Organizacija a městno skriptow Python wopisuja. Zo bychu so module Python importowali, dyrbja jich městna za čas fungowanja znate być.

Tutón mechanizm so za module zwobraznjuje, kotrež na datajowym systemje a dokumenće bazuja. Wobchadźenje z wuwzaćemi je přehladnosće dla wuwostajene. Zapřijeće biblioteka abo zapis, skripty abo module so synonymnje wužiwaja. Makro Python so na funkciju znutřka modula poćahuje.

Dźiwajće na to, zo so lokalny zapis <User Profile>/Scripts/python/pythonpath přeco přepytuje, hdyž so makro Python z <User Profile>/Scripts/python wuwjedźe.

## Module datajoweho systema importować

Biblioteki LibreOfficeDev Basic klasy, rutiny a wariable wobsahuja, module Python klasy, funkcije a wariable wobsahuja. Powšitkowne dźěle zasowužiwajomnych funkcijow Python abo UNO dyrbja so w Moje makra znutřka (User Profile)/Scripts/python/pythonpath składować. Biblioteki Python pomhaja module organizować, zo bychu kolizijam modulowych mjenow zadźěwali. Importujće uno.py znutřka zhromadnje wužitych modulow.

### Priwatne abo zhromadnje wužite module

Priwatne a zhromadnje skripty Python dadźa so importować, hdyž jich zapisy so do šćežki časa fungowanja Python zapřijate. Za dalše informacije wo wuwostajenych posedźenskich klasach hlejće stronu Posedźenske informacije wotwołać.

            # -*- coding: utf-8 -*-
            from __future__ import unicode_literals
            import sys

            user_lib = Session().UserPythonScripts # Městno wužiwarskich skriptow
            if not user_lib in sys.path:
                sys.path.insert(0, user_lib) # Pytanskej šćežce přidać
            import screen_io as ui # modul 'screen_io.py' je w zapisu user_lib directory
            # Waš kod tu slěduje

Tutón přikład Python importowanemu modulej lokalnu wariablu XSCRIPTCONTEXT k dispoziciji staja

            # -*- coding: utf-8 -*-
            from __future__ import unicode_literals
            import uno, sys

            share_lib = Session.SharedPythonScripts() # Městno zhromadnje wužitych skriptow
            if not share_lib in sys.path:
                sys.path.insert(0, share_lib) # Pytanskej šćežce přidać
            from IDE_utils import ScriptContext # 'IDE_utils.py' zhromadnje skripty Python wobsahuje.
            XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
            # Waš kod tu slěduje

### Instalaciske module za nałoženja

Na rozdźěl wot priwatnych a zhromadnje wužitych skriptow dadźa so instalaciske skripty LibreOfficeDev kóždy čas importuja. Nimo modulow Python LibreOfficeDev uno a unohelper dadźa so druhe skripty w zapisu <installation_path>/program direktnje importować, na přikład modul msgbox.

Z konsolu Python:

>>> 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"))

## Dokumentowy modul importować

Importowanje modula Python, kotryž je w dokumenće zasadźeny, so deleka zwobraznjuje. Wobchadźenje ze zmylkami so njewopisuje. Šćežka čas fungowanja Python so aktualizuje, hdyž dokument je wočinjeny a do začinjenja. Za dalše informacije hlejće Přez podawki wodźene makra, zo byšće zhonił, kak móžeće makra Python z dokumentowymi podawkami zwjazać.

            # -*- coding: utf-8 -*-
            from __future__ import unicode_literals

            import sys, uno, zipimport

            def OnDocPostOpenLoadPython(event = None):
                """ Import modulow Python přihotować, hdyž so doc. začituje """
                PythonLibraries.loadLibrary('lib/subdir') # Pytanskej šćežce zapis přidać
                PythonLibraries.loadLibrary('my_gui', 'screen_io') # dir. & import screen_io přidać

            def OnDocQueryCloseUnloadPython(event = None):
                """ PYTHON_PATH porjedźić, hdyž so doc. začinja """
                PythonLibraries.unloadLibrary('my_gui') # Šćežku časa fungowanja Python porjedźić
                # Pokazka: importowane module w tutym přikładźe začitane wostawaja.

            class PythonLibraries():
                """ Wočinjak bibliotekow Python a importowak modulow

                adaptowany wot 'Bibliothèque de fonctions' wot Hubert Lambert
                na https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
                def isImportedModule(module_name: str) -> bool:
                    """ Lisćinu modulow časa fungowanja přepruwować """
                    return (module_name in sys.modules.keys())
                def isLoadedLibrary(lib_name: str) -> bool:
                    """ Wobsah PYTHON_PATH přepruwować """
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    return (url in sys.path)
                def loadLibrary(lib_name: str, module_name=None):
                    """ PYTHON_PATH zapis přidać, pomjenowany modul importować """
                    doc = XSCRIPTCONTEXT.getDocument()
                    url = uno.fileUrlToSystemPath(
                        f'{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):
                    """ zapis z PYTHON_PATH wotstronić """
                    doc = XSCRIPTCONTEXT.getDocument()
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    sys.path.remove(url)

            g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Podobne temy

Posedźenske informacije wobstarać

Programowanje ze skriptami Python

Organizacija a městno skriptow Python

Hlejće Posłuchak Python wutworić za přikłady přez podawk wodźenych makrow.

Prošu podpěrajće nas!