Uvažanje modulov Python

Skripti Python v Collabora Office so treh različnih vrst: lahko so osebni, v skupni rabi ali vdelani v dokumente. Shranjeni so na različnih mestih, opisanih v Organizacija in mesto skriptov v Pythonu. Da bi uvozili module Python, morajo biti njihova mesta znana iz Pythona v času izvajanja.

Ta mehanizem je ponazorjen za datotečni sistem, ki temelji na modulih in na dokumentih temelječih modulih. Obravnavanje izjem je zaradi jasnosti izpuščeno. Izraza knjižnica ali mapa, skripte ali moduli so zamenljivo uporabljeni. Makro Python se nanaša na funkcijo znotraj modula.

warning

Upoštevajte, da je krajevna mapa <Uporabniški profil>/Scripts/Python/pythonpath vedno preiskana, ko zaganjate makro Python iz <Uporabniški profil>/Scripts/Python.


Uvoz modula File System

Knjižnice Collabora Office Basic vsebujejo razrede, procedure in spremenljivke, moduli Python pa vsebujejo razrede, funkcije in spremenljivke. Skupne kose ponovno uporabnih funkcionalnosti Python ali UNO je potrebno shraniti v Moje makre v (uporabniški profil)/Scripts/python/pythonpath. Knjižnice Python so priročne za organizacijo modulov, da preprečite spore z imeni modulov. Uvozite uno.py v module za skupno rabo.

Uporabniški ali skupni moduli

Osebni in skupni skripti Python lahko uvozite, ko so njihove mape vključene v zagonsko pot Pythona. Glejte stran Pridobivanje informacij o sejiza podrobnosti o izpuščenem razredu Session.

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

user_lib = Session().UserPythonScripts  # Mesto skriptov uporabnika
if not user_lib in sys.path:
    sys.path.insert(0, user_lib)  # Dodaj v pot iskanja
import screen_io as ui  # Modul ‘screen_io. py ' prebiva v mapi user_lib
# Tukaj sledi vaša koda

Ta primer Python izpostavi lokalno spremenljivko XSCRIPTCONTEXT uvoznemu modulu:

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

share_lib = Session.SharedPythonScripts()  # Mesto skriptov v skupni rabi
if not share_lib in sys.path:
    sys.path.insert(0, share_lib)  # Dodaj v iskalno pot
from IDE_utils import ScriptContext  # "IDE_utils. py" sedi s skupnimi skripti Python.
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# Tukaj sledi vaša koda

Namestitveni moduli za programe

Za razliko od osebnih in v skupnih skriptov lahko skripte za namestitev Collabora Office uvozite kadar koli. Poleg modulov Collabora Office Python uno in unohelper lahko druge skripte iz mape <pot_namestitve>/program uvozite neposredno, kot npr. modul msgbox.

V lupini Pythona:

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

Uvoz modula Document

Uvažanje v dokument vdelanega modula Python je prikazano spodaj. Obravnavanje napak ni podrobno opisano. Pot izvajanja Pythona je posodobljena, ko je dokument odprt in preden ga zapremo. Če želite izvedeti, kako povezati makre Python za dokumentiranje dogodkov, glejte makre, ki temeljijo na dogodku.

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

import sys, uno

def OnDocPostOpenLoadPython():
    """ Pripravi uvoz modulov Python, ko se naloži dokument """
    PythonLibraries.loadLibrary('lib/subdir')  # Dodaj mapo v iskalno pot
    PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Dodaj mapo in uvozi screen_io

def OnDocQueryCloseUnloadPython():
    """ Počisti PYTHON_PATH, ko se dok. zapre """
    PythonLibraries.unloadLibrary(‘my_gui’)  # Čiščenje poti izvajanja Pythona
    # Opomba: uvoženi moduli ostanejo v tem primeru naloženi.

class PythonLibraries():
    """ Nalagalnik knjižnic in uvoznik modulov Python

    prirejeno po »Bibliothèque de fonctions« avtorja Huberta Lamberta
    na naslovu https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
    def isImportedModule(module_name: str) -> bool:
        """ Preveri seznam modulov ob izvajanju """
        return (module_name in sys.modules.keys())
    def isLoadedLibrary(lib_name: str) -> bool:
        """ Preveri vsebino PYTHON_PATH """
        return (lib_name in sys.path)
    def loadLibrary(lib_name: str, module_name=None):
        """ Dodaj mapo v PYTHON_PATH, uvozi imenovani modul """
        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):
        """ Odstrani mapo iz PYTHON_PATH """
        sys.path.remove(lib_name)

g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Podprite nas!