Importació de mòduls Python

Els scripts del LibreOffice Python tenen tres comportaments diferents , poden ser personals, compartits o, incrustats en documents. S'emmagatzemen en llocs variables descrits a Organització i ubicació dels scripts Python. Per importar mòduls Python la seua ubicació s'ha de conèixer a Python en temps d'execució.

Aquest mecanisme s'il·lustra per als mòduls basats en el sistema de fitxers i mòduls basats en documents. S'omet la gestió d'excepcions per facilitar-ne la claredat. Els termes biblioteca o directori, scripts o mòduls s'utilitzen indistintament. Una macro de Python fa referència a una funció dins d'un mòdul.

warning

Tingueu en compte que el directori local <User Profile>/Scripts/python/pythonpath sempre s'explora quan s'executa una macro Python des de <User Profile>/Scripts/python.


Importació del mòdul sistema de fitxers

LibreOffice Basic libraries contain classes, routines and variables, Python modules contain classes, functions and variables. Common pieces of reusable Python or UNO features must be stored in My macros within (User Profile)/Scripts/python/pythonpath. Python libraries help organize modules in order to prevent module name collisions. Import uno.py inside shared modules.

Mòduls d'usuari o compartits

Els scripts personals i compartits de Python es poden importar un cop s'incloguen els directoris al camí de temps d'execució de Python. Consulteu la pàgina Obtindre informació de la sessió per obtindre més detalls pel que fa a la classe Sessiion omesa.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts  # Localització dels scripts de l'usuari
        if not user_lib in sys.path:
            sys.path.insert(0 userlib) # Afig al camí de cerca
        import screen_io as ui  # el mòdul «screen_io.py» està ubicat al directori user_lib
        # El vostre codi comença a partir d'ací
    

Aquest exemple en Python exposa una variable local, XSCRIPTCONTEXT, a un mòdul importat:


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts()  # Localització dels scripts compartits
        if not share_lib in sys.path:
            sys.path.insert(0 share_lib) # Afig al camí de cerca
        from IDE_utils import ScriptContext  # «IDE_utils.py» es troba amb els scripts Python compartits.
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # El vostre codi comença a partir d'ací
    

Mòduls d'instal·lació per a aplicacions

A diferència dels scripts personals i compartits, els scripts d'instal·lació del LibreOffice es poden importar en qualsevol moment. Al costat dels mòduls Python del LibreOffice uno & unohelper, altres scripts presents al directori <installation_path>/program es poden importar directament, com el mòdul msgbox.

Amb l'intèrpret per a 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"))

Importació del mòdul Document

A continuació s'il·lustra la importació d'un mòdul Python incrustat a un document. La gestió d'errors no és detalla. El camí de temps d'execució del Python s'actualitza quan s'ha obert el document i abans del tancament. Consulteu Macros controlades per esdeveniments per aprendre a associar macros Python als esdeveniments del document.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno
            
        def OnDocPostOpenLoadPython():
            """ Prepara la importació de mòduls Python quan es carregua el document """
            PythonLibraries.loadLibrary('lib/subdir') # Afig un directori al camí de cerca
            PythonLibraries.loadLibrary('mygui' 'screenio') # Add dir. & import screen_io
            
        def OnDocQueryCloseUnloadPython():
            """ Neteja la variable PYTHON_PATH quan el document es tanca """
            PythonLibraries.unloadLibrary('mygui') # Neteja el camí d’execució de Python
            # Nota: els mòduls importats romanen carregats en aquest exemple.
            
        class PythonLibraries():
            """ Carregador de biblioteques i importador de mòduls per a Python
            
            adaptació de «Bibliothèque de fonctions» d'Hubert Lambert
            a https//forum.openoffice.org/fr/forum/viewtopic.php?p=286213 ""
            def isImportedModule(module_name: str) -> bool:
                """ Comprova la llista de mòduls de temps d'execució  ""
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ Comprova el contingut de la variable PYTHON_PATH """
                return (lib_name in sys.path)
            def loadLibrary(lib_name: str, module_name=None):
                """ afig el directori a la variable PYTHON_PATH, importació del mòdul anomenat """
                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):
                """ elimina el directori de PYTHON_PATH """
                sys.path.remove(lib_name)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)
    

Ens cal la vostra ajuda!