Lors de l'importation d'un module avec Python qui exploite LibreOffice, effectuez la recherche de module suivante en plus de la recherche habituelle.
Lors de l'exécution de macros Python, sys.path contient le répertoire \ <répertoire d'installation de LibreOffice > / program. \ <Répertoire d'installation de LibreOffice > est / usr / local / lib / libreoffice pour FreeBSD et% PROGRAMFILES% \ LibreOffice pour Microsoft Windows. Importez uno, unohelper, pythonscript, msgbox à partir d'ici.
Si le sous-répertoire pythonpath du répertoire où la macro est installée ou le fichier pythonpath.zip existe, il sera ajouté à sys.path pour rendre la recherche du module symétrique.
Pour les macros utilisateur,
--Pour Microsoft Windows
%APPDATA%\LibreOffice\4\user\Scripts\python\pythonpath
%APPDATA%\LibreOffice\4\user\Scripts\python\pythonpath.zip
--Pour les systèmes de type FreeBSD ou UNIX
${HOME}/.config/libreoffice/4/user/Scripts/python/pythonpath
${HOME}/.config/libreoffice/4/user/Scripts/python/pythonpath.zip
Sera. Ces chemins sont conservés après la sortie de la macro jusqu'à ce que vous quittiez LibreOffice. Il est présumé qu'elle contient la classe Loader dans \ <répertoire d'installation de LibreOffice > /program/pythonloader.py. La fonction checkForPythonPathBesideComponent () dans le même fichier est utilisée pour vérifier l'existence et l'ajouter à sys.path.
Des macros et extensions partagées par le système sont également ajoutées, donc sys.path peut contenir des répertoires inutiles lors de l'appel de macros.
Par exemple, essayez d'exécuter la macro suivante pour afficher le contenu de sys.path dans une boîte de message.
syspath.py
import sys
from msgbox import MsgBox
def syspath_msgbox():
ctx = XSCRIPTCONTEXT.getComponentContext()
sys_path_box = MsgBox(ctx)
sys_path_box.addButton('oK')
sys_path_box.renderFromBoxSize(300)
sys_path = '\n'.join(sys.path)
sys_path_box.show(sys_path, 0, 'sys.path')
Ce qui suit est affiché. À ce stade, le sous-répertoire pythonpath est créé, mais le fichier pythonpath.zip n'existe pas. Le deuxième affiché / home / shota243 est le répertoire courant au démarrage de LibreOffice. À ce stade, la variable d'environnement PYTHONPATH n'est pas définie.
/usr/local/lib/libreoffice/program
/home/shota243
/usr/local/lib/python37.zip
/usr/local/lib/python3.7
/usr/local/lib/python3.7/lib-dynload
/home/shota243/.local/lib/python3.7/site-packages
/usr/local/lib/python3.7/site-packages
/home/shota/.config/libreoffice/4/user/Scripts/python/pythonpath
APSO --Alternative Script Organizer for Python Voir sys.path depuis l'extension de la console d'interprétation Python Si vous le faites, c'est comme suit.
APSO python console [LibreOffice]
3.7.7 (default, Jun 21 2020, 22:27:00)
[Clang 8.0.0 (tags/RELEASE_800/final 356365)]
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> for p in sys.path:
... print(p)
...
/usr/local/lib/libreoffice/program
/home/shota243
/usr/local/lib/python37.zip
/usr/local/lib/python3.7
/usr/local/lib/python3.7/lib-dynload
/home/shota243/.local/lib/python3.7/site-packages
/usr/local/lib/python3.7/site-packages
/home/shota243/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu2030qffpne.tmp_/apso.oxt/python/pythonpath
>>>
La destination d'installation de l'extension APSO est /home/shota243/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu2030qffpne.tmp_. (Omis) lu2030qffpne.tmp_ / apso.oxt / python / apso.py est le corps principal (Omis) sous le répertoire lu2030qffpne.tmp_ / apso.oxt / python / pythonpath Les modules sont apso_debug.py, apso_utils.py et theconsole.py.
Les programmes qui importent des macros ou uno peuvent importer des identifiants à partir de modules commençant par com.sun.star.
En effet, la fonction \ _ \ _ import \ _ \ _ (), qui est l'état réel de l'importation, a été remplacée par la fonction \ _uno \ _import () dans \ <répertoire d'installation de LibreOffice > /program/uno.py. com n'existe nulle part dans le chemin de recherche du module. Dans la fonction \ _uno \ _import (), si la fonction standard \ _ \ _ import \ _ \ _ () ne parvient pas à rechercher un module, la fonction pyuno.getClass () tente de l'obtenir. À ce stade, puisque \ <nom du module > et \ <identifiant > de \ <nom du module > import \ <identifiant > sont concaténés pour appeler getClass (), \ <nom du module > importation entière ou depuis L'exception est l'importation en bloc avec \ <nom du module > import *.
Exemple:
mike% export PYTHONPATH="${PYTHONPATH}:/usr/local/lib/libreoffice/program"
mike% export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib/libreoffice/program"
mike% export PATH="${PATH}:/usr/local/lib/libreoffice/program"
mike% python
python
Python 3.7.7 (default, Jun 21 2020, 22:27:00)
[Clang 8.0.0 (tags/RELEASE_800/final 356365)] on freebsd11
Type "help", "copyright", "credits" or "license" for more information.
>>> import uno
import uno
>>> from com.sun.star.uno import RuntimeException
from com.sun.star.uno import RuntimeException
>>> import com.sun.start.uno.RuntimeException
import com.sun.start.uno.RuntimeException
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/libreoffice/program/uno.py", line 356, in _uno_import
return _builtin_import(name, *optargs, **kwargs)
ModuleNotFoundError: No module named 'com'
>>> from com.sun.star.uno import *
from com.sun.star.uno import *
from com.sun.star.uno import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/libreoffice/program/uno.py", line 434, in _uno_import
raise uno_import_exc
File "/usr/local/lib/libreoffice/program/uno.py", line 356, in _uno_import
return _builtin_import(name, *optargs, **kwargs)
ImportError: No module named 'com' (or 'com.sun.star.uno.*' is unknown)
>>>
La référence des modules et identifiants pouvant être importés est considérée comme com :: sun :: star Module Reference.
Recommended Posts