Contingut

# 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 seva 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.

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

Les llibreries bàsiques de PRODUCTNAME contenen classes, rutines i variables, els mòduls Python contenen classes, funcions i variables. Les peces reutilitzables comunes de Python o UNO s'han d'emmagatzemar a Les meves macros dins del (Perfil d'usuari)/Scripts/python/pythonpath. Les llibreries Python ajuden a organitzar els mòduls per evitar col·lisions amb els noms de mòduls. Importeu uno.py dins dels mòduls compartits.

### Mòduls d'usuari o compartits

Els scripts personals i compartits de Python es poden importar un cop s'incloguin els directoris al camí de temps d'execució de Python. Consulteu la pàgina Obtenir informació de la sessió per obtenir 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) # Afegeix 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'aquí

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) # Afegeix 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'aquí

### 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, zipimport

            def OnDocPostOpenLoadPython(event = None):
                """ Prepara la importació de mòduls Python quan es carregua el document """
                PythonLibraries.loadLibrary('lib/subdir') # Afegeix un directori al camí de cerca
                PythonLibraries.loadLibrary('mygui' 'screenio') # Add dir. & import screen_io

            def OnDocQueryCloseUnloadPython(event = None):
                """ 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 """
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    return (url in sys.path)
                def loadLibrary(lib_name: str, module_name=None):
                    """ afegeix el directori a la variable PYTHON_PATH, importació del mòdul anomenat """
                    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):
                    """ elimina el directori de PYTHON_PATH """
                    doc = XSCRIPTCONTEXT.getDocument()
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    sys.path.remove(url)

            g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Temes relacionats

S'està obtenint informació de la sessió

Programació amb scripts en Python

Organització i ubicació dels scripts en Python

Consulteu Crea un oient Python per a exemples de macros orientades a esdeveniments.