Python : Moduluak inportatzea

Edukiak
Indizea 🔎︎

# Python moduluak inportatzea

LibreOffice Python scriptak hiru motatakoak izan daitezke: pertsonalak, partekatuak edo dokumentuetan kapsulatuak. Hainbat tokitan biltegiratzen dira, begiratu Python scripten antolaketa eta kokalekua. Python moduluak inportatzeko, Python exekuzio-garaian ezagutu behar ditu haien kokalekuak.

Mekanismo hori fitxategi-sistemetan oinarritutako moduluen bidez eta dokumentuetan oinarritutakoen bidez azaldu dira. Salbuespenen kudeaketa kendu egin da, azalpenak argiagoak izateko. Zenbait termino (liburutegia edo direktorioa, scriptak edo moduluak) elkar trukagarriak dira. Python makro bat modulu baten barruan dagoen funtzio bat da.

Kontuan izan <User Profile>/Scripts/python/pythonpath direktorio lokala beti arakatzen dela <User Profile>/Scripts/python bideko Python makro bat exekutatzen denean.

## Fitxategi-sistemako moduluak inportatzea

LibreOffice Basic liburutegiek klaseak, errutinak eta aldagaiak dituzte; Python moduluek, berriz, klaseak, funtzioak eta aldagaiak dituzte. Python edo UNO eginbideen pieza berrerabilgarri arruntak Nire makroak karpetan biltegiratu behar dira, (erabiltzaile-profila)/Scripts/python/pythonpath barruan. Python liburutegiek moduluak antolatzeko balio dute, moduluen izenen gatazkak sor ez daitezen. Inportatu uno.py partekatutako moduluen barruan.

### Erabiltzailearen moduluak edo modulu partekatuak

Python script pertsonalak eta partekatuak inportatzeko, haien direktorioek Pythonen exekuzio-garaiaren bide-izenean egon behar dute. Ikus Saioaren informazioa eskuratzea orria falta diren saio-klaseen inguruko xehetasun gehiago ezagutzeko.

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

            user_lib = Session().UserPythonScripts  # Erabiltzaile-scripten kokalekua
            if not user_lib in sys.path:
                sys.path.insert(0, user_lib)  # Gehitu bilaketa-bideari
            import screen_io as ui  # 'screen_io.py' modulua user_lib direktorioan dago
            # Zure kodea hemen doa

Python adibide honek XSCRIPTCONTEXT aldagai bat inportatutako modulu bati erakusten dio:

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

            share_lib = Session.SharedPythonScripts()  # Partekatutako scripten kokalekua
            if not share_lib in sys.path:
                sys.path.insert(0, share_lib)  # Gehitu bilaketa-bideari
            from IDE_utils import ScriptContext  # 'IDE_utils.py' partekatutako Python scriptekin dago.
            XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
            # Zure kodea hemen doa

### Instalaziorako moduluak aplikazioetarako

Script pertsonal eta partekatuak ez bezala, LibreOffice instalazio scriptak edozein unetan inportatu daitezke. uno & unohelper LibreOffice Python moduluen ondoan, <installation_path>/program direktorioan dauden beste script batzuk zuzenean inportatu daitezke, adibidez msgbox modulua.

Python kontsolarekin:

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

## Dokumentuko modulua inportatzea

Dokumentu batean kapsulatutako Python modulu bat inportatzea azaltzen da behean. Erroreen maneiua ez da azaltzen. Pythonen exekuzio-garaiko bide-izena eguneratu egiten da dokumentua ireki denean eta itxi baino lehen. Ikus Gertaeren mendeko makroak Python makroak dokumentu-gertaerekin nola lotu ikasteko.

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

            import sys, uno

            def OnDocPostOpenLoadPython():
                """ Prestatu Python moduluen inportazioa dok. kargatzen denean """
                PythonLibraries.loadLibrary('lib/subdir')  # Gehitu direktorioa bilaketa-bidera
                PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Gehitu direktorioa eta inportatu screen_io

            def OnDocQueryCloseUnloadPython():
                """ Garbitu PYTHON_PATH dok. ixten denean """
                PythonLibraries.unloadLibrary('my_gui')  # Pythonen exekuzio-garaiko bide-izena garbitzea
                # Oharra: Adibide honetan, inportatutako moduluek kargatuta jarraitzen dute.

            class PythonLibraries():
                """ Python liburutegien kargatzailea eta moduluen inportatzailea

                Hubert Lambert garatzailearen 'Bibliothèque de fonctions' lanetik moldatua
                https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
                def isImportedModule(module_name: str) -> bool:
                    """ Egiaztatu exekuzio-garaiko moduluen zerrenda """
                    return (module_name in sys.modules.keys())
                def isLoadedLibrary(lib_name: str) -> bool:
                    """ Egiaztatu PYTHON_PATH edukia """
                    return (lib_name in sys.path)
                def loadLibrary(lib_name: str, module_name=None):
                    """ gehitu direktorioa PYTHON_PATH bideari, inportatu izendun modulua """
                    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):
                    """ kendu direktorioa PYTHON_PATH aldagaitik """
                    sys.path.remove(lib_name)

            g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Erlazionatutako gaiak

Saioaren informazioa eskuratzea

Python scriptekin programatzea

Python scripten antolaketa eta kokalekua

Begiratu Python entzulea sortzea gertaeren mendeko makroen adibideak ikusteko.