Module Python importěrowaś

Daju skripty Python LibreOffice w tśich rozdźělnych wariantach: mógu priwatne, zgromadnje wužyte abo do dokumentow zasajźone byś. Składuju se na rozdźělnych městnach, kótarež se w Organizacija a městno skriptow Python wopisuju. Aby se module Python importěrowali, muse jich městna za cas wužywanja znate byś.

Toś ten mechanizm se za module znaglědnja, kótarež na datajowem systemje a dokumenśe bazěruju. Wobchad z wuwześami jo pśeglědnosći dla wuwóstajone. Zapśimjeśe biblioteka abo zapis, skripty abo module se synonymnje wužywaju. Makro Python se na funkciju w modulu póśěgujo.

warning

Źiwajśo na to, až se lokalny zapis <User Profile>/Scripts/python/pythonpath pśecej pśepytujo, gaž se makro Python z <User Profile>/Scripts/python wuwjeźo.


Module datajowego systema importěrowaś

Biblioteki LibreOffice Basic klase, rutiny a wariable wopśimuju, module Python klase, funkcije a wariable wopśimuju. Powšykne źěle zasejwužywajobnych funkcijow Python abo UNO muse se w Móje makra w (User Profile)/Scripts/python/pythonpath składowaś. Biblioteki Python pomagaju module organizěrowaś, aby kolizijam modulowych mjenjow zajźowali. Importěrujśo uno.py w zgromadnje wužytych modulach.

Wósobinske abo zgromadnje wužyte module

Wósobinske a zgromadnje skripty Python daju se importěrowaś, gaž jich zapise se do sćažki casa wužywanja Python zapśimjete. Za dalšne informacije wó wuwóstajonych pósejźeńskich klasach glejśo bok Pósejźeńske informacije wótwołaś.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts # Městno wužywaŕskich skriptow
        if not user_lib in sys.path:
            sys.path.insert(0, user_lib) # Pytańskej sćažce pśidaś
        import screen_io as ui # modul 'screen_io.py' jo w zapisu user_lib directory
        # Waš kod how slědujo
    

Toś ten pśikład Python importěrowanemu moduloju lokalnu wariablu XSCRIPTCONTEXT k dispoziciji staja


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts() # Městno zgromadnje wužytych skriptow
        if not share_lib in sys.path:
            sys.path.insert(0, share_lib) # Pytańskej sćažce pśidaś
        from IDE_utils import ScriptContext # 'IDE_utils.py' zgromadnje skripty Python wopśimujo.
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # Waš kod how slědujo
    

Instalaciske module za nałoženja

Na rozdźěl wót wósobinskich a zgromadnje wužytych skriptow daju se instalaciske skripty LibreOffice kuždy cas importěruju. Mimo modulow Python LibreOffice uno a unohelper daju se druge skripty w zapisu <installation_path>/program direktnje importěrowaś, 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 importěrowaś

Importěrowanje modula Python, kótaryž jo w dokumenśe zasajźony, se dołojce znaglědnja. Wobchad ze zmólkami se njewopisujo. Sćažka cas wužywanja Python se aktualizěrujo, gaž dokument jo wócynjony a do zacynjanja. Za dalšne informacije glejśo Přśztšojenja wóźone makra, aby zgónił, kak móžośo makra Python z dokumentowymi tšojenjami zwězaś.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno
            
        def OnDocPostOpenLoadPython():
            """ Import modulow Python pśigótowaś, gaž se doc. zacytujo """
            PythonLibraries.loadLibrary('lib/subdir') # Pytańskej sćažce zapis pśidaś
            PythonLibraries.loadLibrary('my_gui', 'screen_io') # dir. & import screen_io pśidaś
            
        def OnDocQueryCloseUnloadPython():
            """ PYTHON_PATH pórěźiś, gaž se doc. zacynja """
            PythonLibraries.unloadLibrary('my_gui') # Sćažku casa wužywanja Python pórěźiś
            # Pokazka: importěrowane module w toś tom pśikłaźe zacytane wóstawaju.
            
        class PythonLibraries():
            """ Wótcynjak bibliotekow Python a importěrowak modulow
            
            adaptěrowany wót 'Bibliothèque de fonctions' wót Hubert Lambert
            na https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
            def isImportedModule(module_name: str) -> bool:
                """ Lisćinu modulow casa wužywanja pśeglědowaś """
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ Wopśimjeśe PYTHON_PATH pśeglědowaś """
                return (lib_name in sys.path)
            def loadLibrary(lib_name: str, module_name=None):
                """ PYTHON_PATH zapis pśidaś, pomjenjony modul importěrowaś """
                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):
                """ zapis z PYTHON_PATH wótwónoźeś """
                sys.path.remove(lib_name)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)
    

Pšosym pódprějśo nas!