Importing Python Modules

Skrypty LibreOffice w języku Python są dostępne w trzech wersjach: mogą być osobiste, udostępniane lub osadzone w dokumentach. Są one przechowywane w różnych miejscach opisanych w sekcji Organizacja i lokalizacja skryptów Pythona. Aby zaimportować moduły Pythona, ich lokalizacja musi być znana z Pythona w czasie wykonywania.

Ten mechanizm jest zilustrowany dla modułów opartych na systemie plików i modułach opartych na dokumentach. Dla przejrzystości pominięto obsługę wyjątków. Terminy biblioteka lub katalog, skrypty lub moduły są używane zamiennie. Makro w języku Python odnosi się do funkcji wewnątrz modułu.

warning

Zauważ, że lokalny katalog /Scripts/python/pythonpath jest zawsze eksplorowany podczas uruchamiania makra Pythona z /Scripts/python.


Importowanie modułu systemu plików

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.

Moduły użytkownika lub współdzielone

Osobiste i współdzielone skrypty Pythona można importować, gdy ich katalogi zostaną uwzględnione w ścieżce wykonawczej Pythona. Więcej informacji na temat pominiętej klasy sesji można znaleźć na stronie Pobieranie informacji o sesji.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts  # Lokalizacja skryptów użytkownika
        if not user_lib in sys.path:
            sys.path.insert(0, user_lib)  # Dodaj do ścieżki wyszukiwania
        import screen_io as ui  # 'screen_io.py' moduł znajduje się w user_lib directory
        # Poniżej znajduje się kod niestandardowy
    

Ten przykład Pythona udostępnia lokalną zmienną XSCRIPTCONTEXT w zaimportowanym module:


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts()  # Lokalizacja udostępnionych skryptów
        if not share_lib in sys.path:
            sys.path.insert(0, share_lib)  # Dodaj do ścieżki wyszukiwania
        from IDE_utils import ScriptContext  # 'IDE_utils.py' znajduje się we wspólnych skryptach Pythona
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # Poniżej znajduje się kod niestandardowy
    

Moduły instalacyjne dla aplikacji

W przeciwieństwie do skryptów osobistych i udostępnionych, skrypty instalacyjne LibreOffice można importować w dowolnym momencie. Oprócz modułów uno i unohelper LibreOffice Pythona, inne skrypty znajdujące się w katalogu /program można importować bezpośrednio, takie jak msgbox.

Za pomocą powłoki języka 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"))

Importowanie modułu dokumentu

Importowanie modułu osadzonego w dokumencie języka Python zostało zilustrowane poniżej. Obsługa błędów nie jest szczegółowo opisana. Ścieżka środowiska uruchomieniowego Pythona jest aktualizowana po otwarciu dokumentu i przed zamknięciem. Zapoznaj się z artykułem Makra sterowane zdarzeniami, aby dowiedzieć się, jak powiązać makra Pythona z dokumentacją zdarzeń.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno
            
        def OnDocPostOpenLoadPython():
            """ Przygotuj import modułów Pythona po załadowaniu dokumentu """
            PythonLibraries.loadLibrary('lib/subdir')  # Dodaj katalog do ścieżki wyszukiwania
            PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Dodaje katalog i importuje screen_io
            
        def OnDocQueryCloseUnloadPython():
            """ Czyści PYTHON_PATH podczas zamykania dokumentu """
            PythonLibraries.unloadLibrary('my_gui')  # Oczyszczanie ścieżki środowiska uruchomieniowego Pythona
            # Uwaga: w tym przykładzie zaimportowane moduły pozostają załadowane.
            
        class PythonLibraries():
            """ Program ładujący biblioteki Pythona i importer modułów
            
            przystosowano z 'Bibliothèque de fonctions' autorstwa Huberta Lamberta
            pod adresem https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
            def isImportedModule(module_name: str) -> bool:
                """ Sprawdź listę modułów wykonawczych """
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ Sprawdź zawartość PYTHON_PATH """
                return (lib_name in sys.path)
            def loadLibrary(lib_name: str, module_name=None):
                """ dodaj katalog do PYTHON_PATH, zaimportuj nazwany moduł """
                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):
                """ usuń katalog z PYTHON_PATH """
                sys.path.remove(lib_name)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)