Python : importer des modules

Contenu
Index 🔎︎

# Importer des modules Python

Les scripts Python de LibreOffice se déclinent en trois versions distinctes, ils peuvent être personnels, partagés ou intégrés dans des documents. Ils sont stockés à différents endroits décrits dans Python Scripts Organization and Location. Afin d'importer des modules Python, leurs emplacements doivent être connus depuis Python au moment de l'exécution.

Ce mécanisme est illustré pour les modules basés sur le système de fichiers et les modules basés sur les documents. La gestion des exceptions est omise par souci de clarté. Les termes bibliothèque ou répertoire, scripts ou modules sont utilisés de manière interchangeable. Une macro Python fait référence à une fonction dans un module.

Notez que <User Profile>/Scripts/python/pythonpath répertoire local est toujours exploré lors de l'exécution d'une macro Python de <User Profile>/Scripts/python.

## Import du module système de fichiers

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.

### Modules utilisateur ou partagés

Les scripts Python personnels et partagés peuvent être importés une fois que leurs répertoires sont inclus dans le chemin d'exécution Python. Reportez-vous à la page Obtenir des informations de session pour plus de détails sur la classe de session omise.

            # -*- coding: utf-8 -*-
            from __future__ import unicode_literals
            import sys

            user_lib = Session().UserPythonScripts  # emplacement des scripts utilisateur
            if not user_lib in sys.path:
                sys.path.insert(0, user_lib)  # Ajouter au chemin de recherche
            import screen_io as ui  # le module 'screen_io.py' module réside dans le répertoire user_lib
            # Votre code suit ici

Cet exemple Python expose une variable XSCRIPTCONTEXT locale à un module importé :

            # -*- coding: utf-8 -*-
            from __future__ import unicode_literals
            import uno, sys

            share_lib = Session.SharedPythonScripts()  # Emplacement des scripts partagés
            if not share_lib in sys.path:
                sys.path.insert(0, share_lib)  # Ajouter au chemin de recherche
            from IDE_utils import ScriptContext  # IDE_utils.py' se trouve avec les scripts Python partagés.
            XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
            # Votre code suit ici

### Modules d'installation pour applications

Contrairement aux scripts personnels et partagés, les scripts d'installation de LibreOffice peuvent être importés à tout moment. À côté des modules LibreOffice Python uno & unohelper, les autres scripts présents dans le répertoire <installation_path>/program peuvent être importés directement, comme le module msgbox.

Avec le shell 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"))

## Importation de modules de documents

Importing a Python document embedded module is illustrated below. Error handling is not detailed. Python run time path is updated when document has been opened and before closure. Refer to Event-Driven Macros to learn how to associate Python macros to document events.

            # -*- coding: utf-8 -*-
            from __future__ import unicode_literals

            import sys, uno

            def OnDocPostOpenLoadPython():
                """ Prepare Python modules import when doc. loaded """
                PythonLibraries.loadLibrary('lib/subdir')  # Add directory to search path
                PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Add dir. & import screen_io

            def OnDocQueryCloseUnloadPython():
                """ Cleanup PYTHON_PATH when doc. Gets closed """
                PythonLibraries.unloadLibrary('my_gui')  # Python runtime path cleanup
                # Note: imported modules remain loaded in this example..

            class PythonLibraries():
                """ Python library loader and module importer

                adapted from 'Bibliothèque de fonctions' by Hubert Lambert
                at https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
                def isImportedModule(module_name: str) -> bool:
                    """ Check run time module list """
                    return (module_name in sys.modules.keys())
                def isLoadedLibrary(lib_name: str) -> bool:
                    """ Check PYTHON_PATH content """
                    return (lib_name in sys.path)
                def loadLibrary(lib_name: str, module_name=None):
                    """ add directory to PYTHON_PATH, import named module """
                    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):
                    """ remove directory from PYTHON_PATH """
                    sys.path.remove(lib_name)

            g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Rubriques connexes

Getting Session Information

Programming with Python Scripts

Python Scripts Organization and Location

Refer to Creating a Python Listener for examples of event-driven macros.