Python: Importowanie modułów

Spis treści
Indeks 🔎︎

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

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)

Tematy pokrewne

Pobieranie informacji o sesji

Programming with Python Scripts

Python Scripts Organization and Location

Aby zapoznać się z przykładami makr sterowanych zdarzeniami, zobacz Tworzenie detektorów Pythona.