Pag-import ng mga Module ng Python

Ang LibreOffice Python script ay may tatlong natatanging lasa, maaari silang maging personal, ibinahagi o i-embed sa mga dokumento. Ang mga ito ay nakaimbak sa iba't ibang lugar na inilarawan sa Organisasyon at Lokasyon ng Python Scripts . Upang makapag-import ng mga module ng Python, dapat malaman ang kanilang mga lokasyon mula sa Python sa oras ng pagtakbo.

Ang mekanismong ito ay inilalarawan para sa mga module na nakabatay sa file system at mga module na nakabatay sa dokumento. Ang paghawak ng exception ay tinanggal para sa kalinawan. Ang mga terminong aklatan o direktoryo, mga script o mga module ay ginagamit nang palitan. Ang Python macro ay tumutukoy sa isang function sa loob ng isang module.

warning

Tandaan na<User Profile> /Scripts/python/pythonpath Ang lokal na direktoryo ay palaging ginalugad kapag nagpapatakbo ng isang Python macro mula sa<User Profile> /Scripts/python .


Pag-import ng module ng File System

Ang LibreOffice na mga pangunahing aklatan ay naglalaman ng mga klase, routine at variable, ang Python module ay naglalaman ng mga klase, function at variable. Ang mga karaniwang piraso ng magagamit muli na Python o mga tampok ng UNO ay dapat na naka-imbak sa Mga macro ko sa loob (Profile ng User)/Scripts/python/pythonpath . Ang mga library ng Python ay tumutulong sa pag-aayos ng mga module upang maiwasan ang mga banggaan ng pangalan ng module. Mag-import uno.py sa loob ng mga nakabahaging module.

User o Shared Module

Maaaring ma-import ang mga personal at ibinahaging script ng Python kapag ang kanilang mga direktoryo ay kasama sa Python run time path. Sumangguni sa Pagkuha ng impormasyon ng session page para sa higit pang mga detalye tungkol sa tinanggal na Session Class.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts # Lokasyon ng mga script ng user
        if not user_lib in sys.path:
            sys.path.insert(0, user_lib) # Idagdag sa path ng paghahanap
        import screen_io bilang ui # 'screen_io.py' module ay naninirahan sa user_lib directory
        # Ang iyong code ay sumusunod dito
    

Ang halimbawang Python na ito ay naglalantad ng lokal na XSCRIPTCONTEXT variable sa isang na-import na module:


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts() # Nakabahaging lokasyon ng mga script
        if not share_lib in sys.path:
            sys.path.insert(0, share_lib) # Idagdag sa path ng paghahanap
        mula sa IDE_utils import ScriptContext # 'IDE_utils.py' ay nakaupo sa mga nakabahaging script ng Python.
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # Ang iyong code ay sumusunod dito
    

Mga Module sa Pag-install para sa Mga Application

Hindi tulad ng mga personal at nakabahaging script, maaaring ma-import ang mga script ng pag-install ng LibreOffice anumang oras. Sa tabi uno at walang katulong LibreOffice Python modules, iba pang mga script na nasa<installation_path> /programa direktoryo ay maaaring direktang ma-import, tulad ng msgbox modyul.

Gamit ang shell ng 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"))

Pag-import ng Module ng Dokumento

Ang pag-import ng naka-embed na module ng Python na dokumento ay inilalarawan sa ibaba. Hindi detalyado ang paghawak ng error. Ang Python run time path ay ina-update kapag nabuksan ang dokumento at bago isara. Sumangguni sa Mga Macro na Batay sa Kaganapan upang matutunan kung paano iugnay ang mga Python macro sa pagdokumento ng mga kaganapan.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno
            
        def OnDocPostOpenLoadPython():
            """ Ihanda ang pag-import ng mga Python module kapag na-load ng doc. ang """
            PythonLibraries.loadLibrary('lib/subdir') # Magdagdag ng direktoryo sa path ng paghahanap
            PythonLibraries.loadLibrary('my_gui', 'screen_io') # Magdagdag ng dir. & import screen_io
            
        def OnDocQueryCloseUnloadPython():
            """ Linisin ang PYTHON_PATH kapag isinara ni doc. """
            PythonLibraries.unloadLibrary('my_gui') # Python runtime path cleanup
            # Tandaan: nananatiling naka-load ang mga na-import na module sa halimbawang ito.
            
        class PythonLibraries():
            """ Python library loader at module importer
            
            hinango mula sa 'Bibliothèque de fonctions' ni Hubert Lambert
            sa https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
            def isImportedModule(module_name: str) -> bool:
                """ Suriin ang run time module list """
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ Suriin ang nilalaman ng PYTHON_PATH """
                return (lib_name in sys.path)
            def loadLibrary(lib_name: str, module_name=None):
                """ magdagdag ng direktoryo sa PYTHON_PATH, import na pinangalanang 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):
                """ alisin ang direktoryo mula sa PYTHON_PATH """
                sys.path.remove(lib_name)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)
    

Mangyaring suportahan kami!