Importieren von Python-Modulen

LibreOffice Python-Skripte gibt es in drei verschiedenen Varianten. Sie k├Ânnen pers├Ânlich sein, gemeinsam genutzt werden oder in Dokumente eingebettet sein. Sie werden an verschiedenen Orten gespeichert, die in Organisation und Speicherort von Python-Skripten beschrieben sind. Um Python-Module zu importieren, m├╝ssen ihre Positionen zur Laufzeit von Python bekannt sein.

Dieser Mechanismus ist f├╝r Dateisystem- und Dokument-basierte Module dargestellt. Die Ausnahmebehandlung ist aus Gr├╝nden der ├ťbersichtlichkeit weggelassen. Die Begriffe Bibliothek oder Verzeichnis, Skripte oder Module werden synonym verwendet. Ein Python-Makro verweist auf eine Funktion in einem Modul.

warning

Beachten Sie, dass das lokale Verzeichnis <User Profile>/Scripts/python/pythonpath immer durchsucht wird, wenn ein Python-Makro unter <User Profile>/Scripts/python ausgef├╝hrt wird.


Import von Dateisystemmodulen

LibreOffice Basic-Bibliotheken enthalten Klassen, Routinen und Variablen, Python-Module enthalten Klassen, Funktionen und Variablen. Allgemeine Teile wiederverwendbarer Python- oder UNO-Funktionen m├╝ssen in Meine Makros in (Benutzerprofil)/Scripts/python/pythonpath gespeichert werden. Python-Bibliotheken helfen beim Organisieren von Modulen, um Kollisionen von Modulnamen zu verhindern. Importieren Sie uno.py in gemeinsam genutzte Module.

Pers├Ânliche oder gemeinsam genutzte Module

Pers├Ânliche und gemeinsam genutzte Python-Skripte k├Ânnen importiert werden, sobald ihre Verzeichnisse im Python-Laufzeitpfad enthalten sind. Weitere Informationen zu ausgelassenen Sitzungsklassen finden Sie auf der Seite Sitzungsinformationen abrufen.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts  # Speicherort der Benutzerskripte
        if not user_lib in sys.path:
            sys.path.insert(0, user_lib)  # Zum Suchpfad hinzuf├╝gen
        import screen_io as ui  # Das Modul 'screen_io.py' befindet sich im Verzeichnis user_lib
        # Ihr Code folgt hier
    

In diesem Python-Beispiel wird eine lokale Variable XSCRIPTCONTEXT f├╝r ein importiertes Modul verf├╝gbar gemacht:


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts()  # Speicherort f├╝r gemeinsame Skripte
        if not share_lib in sys.path:
            sys.path.insert(0, share_lib)  # Zum Suchpfad hinzuf├╝gen
        from IDE_utils import ScriptContext  # 'IDE_utils.py' enth├Ąlt gemeinsam genutzte Python-Skripte.
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # Ihr Code folgt hier
    

Installationsmodule f├╝r Anwendungen

Im Gegensatz zu pers├Ânlichen und freigegebenen Skripten k├Ânnen vorinstallierte LibreOffice-Skripte jederzeit importiert werden. Neben den LibreOffice Python-Modulen uno und unohelper k├Ânnen andere Skripte, die im Verzeichnis <Installationspfad>/program vorhanden sind, direkt importiert werden, beispielsweise das Modul msgbox.

Mit Python-Shell:

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

Import von Dokumentenmodulen

Das Importieren eines in Python-Dokumente eingebetteten Moduls ist unten dargestellt. Fehlerbehandlung ist nicht detailliert. Der Python-Laufzeitpfad wird aktualisiert, wenn das Dokument ge├Âffnet wurde und bevor es geschlossen wird. Informationen zum Zuordnen von Python-Makros zu Dokumentereignissen finden Sie unter Ereignisgesteuerte Makros.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno
            
        def OnDocPostOpenLoadPython():
            """ Bereitet den Import von Python-Modulen vor, wenn doc. geladen wird """
            PythonLibraries.loadLibrary('lib/subdir')  # Verzeichnis zum Suchpfad hinzuf├╝gen
            PythonLibraries.loadLibrary('my_gui', 'screen_io')  # F├╝gt dir. & import screen_io hinzu
            
        def OnDocQueryCloseUnloadPython():
            """ Bereinigt PYTHON_PATH, wenn doc. geschlossen wird """
            PythonLibraries.unloadLibrary('my_gui')  # Bereinigung des Python-Laufzeitpfads
            # Hinweis: In diesem Beispiel bleiben importierte Module geladen.
            
        class PythonLibraries():
            """ Python-Bibliotheks-Loader und Modul-Importer
            
            adaptiert aus 'Biblioth├Ęque de fonctions' von Hubert Lambert
            unter https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
            def isImportedModule(module_name: str) -> bool:
                """ Laufzeitmodulliste ├╝berpr├╝fen """
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ ├ťberpr├╝fung des PYTHON_PATH-Inhalts """
                return (lib_name in sys.path)
            def loadLibrary(lib_name: str, module_name=None):
                """ Verzeichnis zu PYTHON_PATH hinzuf├╝gen, benanntes Modul importieren """
                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):
                """ Verzeichnis aus PYTHON_PATH entfernen """
                sys.path.remove(lib_name)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)
    

Bitte unterst├╝tzen Sie uns!