[Résolu][Python] Bibliothèque de fonctions dans un document

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

[Résolu][Python] Bibliothèque de fonctions dans un document

Message par jeanmi2403 »

Bonjour,
Après la résolution de l'utilisation d'une bibliothèque de fonctions, je cherche maintenant à intégrer cette bibliothèque dans un document, de manière à ce que l'utilisateur n'ait pas à bricoler dans son dossier personnel.
Je pensais à créer un dossier pythonpass dans le dossier scripts\python\pythonpath, mais ça aurait été trop facile !
Je ne trouve aucune littérature sur le sujet (ni anglophone, ni francophone..)
Quelqu'un a-t-il un document dur le sujet ?
en attendant je vais essayer de récupérer le chemin du script appelant et l'ajouter au PYTHONPATH, sans grand espoir..
Cordialement et bonne fin de semaine....
Dernière modification par jeanmi2403 le 07 nov. 2016 18:34, modifié 1 fois.
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Python] Bibliothèque de fonctions dans un document

Message par Hubert Lambert »

Bonjour Jean-Michel,

Le répertoire "pythonpath" ne fonctionnera pas dans un document car l'url vers ce répertoire est propre à OpenOffice/LibreOffice et ne peut être comprise par python.
Je ne vois pas de solution simple pour utiliser une libraire externe qui serait incorporée à un document.
Le plus simple est encore de placer les fonctions requises directement dans le module qui les utilise (par exemple dans une classe dédiée), même si ce n'est sans doute pas le plus satisfaisant...
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

Re: [Python] Bibliothèque de fonctions dans un document

Message par jeanmi2403 »

Bonsoir Hubert,
Hubert Lambert a écrit :Le répertoire "pythonpath" ne fonctionnera pas dans un document car l'url vers ce répertoire est propre à OpenOffice/LibreOffice et ne peut être comprise par python.
.
Je m'en doutais. Difficile d'accéder à quelque chose d'encapsulé.
Le plus simple est encore de placer les fonctions requises directement dans le module qui les utilise
Par "module", je suppose que tu entends "fichier" ?
J'en déduis qu'un programme python dans un document LibO est nécessairement monofichier ?
Bonne soirée.
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Python] Bibliothèque de fonctions dans un document

Message par Hubert Lambert »

jeanmi2403 a écrit :Par "module", je suppose que tu entends "fichier" ?
Un fichier python oui.
jeanmi2403 a écrit :J'en déduis qu'un programme python dans un document LibO est nécessairement monofichier ?
On peut voir la chose ainsi en effet. Si des scripts python se trouvent incorporés à un document dans des fichiers séparés, ils ne pourront malheureusement pas fonctionner ensemble via le système d'import natif. Il est sans doute possible d'utiliser le mécanisme d'invocation propre à uno, mais l'intérêt est a prior nul entre deux scripts python...
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Python] Bibliothèque de fonctions dans un document

Message par Hubert Lambert »

Un truc qui semble fonctionner, même si cela paraît très peu orthodoxe et mériterait d'être solidement testé : utiliser le module stantard "zipimport", qui permet d'importer un module depuis un fichier zip. Comme les fichiers odf sont justement des zip, il suffit de passer le chemin complet vers la bibliothèque souhaitée dans le fichier (il faut que ledit fichier soit préalablement sauvegardé).
Exemple (voir fichier joint) :

Code : Tout sélectionner

import zipimport
import unohelper

doc = XSCRIPTCONTEXT.getDocument()
url = unohelper.fileUrlToSystemPath('{}/{}'.format(doc.URL,'Scripts/python'))
outils = zipimport.zipimporter(url).load_module('outils')

def testoutils(event=None):
    outils.msgbox("Importation de la bibliothèque <outils> réussie !")
Cordialement.
Pièces jointes
testpy.odt
(11.12 Kio) Téléchargé 279 fois
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

Re: [Python] Bibliothèque de fonctions dans un document

Message par jeanmi2403 »

Bonsoir Hubert,
Comme disaient mes élèves : "Trop fort !" :D
Bien joué et merci, je vais tester...
Bon dimanche,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Python] Bibliothèque de fonctions dans un document

Message par Hubert Lambert »

J'ai amélioré le code en tenant compte du fait que le module zipimport est utilisé implicitement par python (ce qui supprime au passage les erreurs avec AOOo lorsqu'une url contient des caractères accentués) :

Code : Tout sélectionner

import sys
import unohelper

doc = XSCRIPTCONTEXT.getDocument()
url = unohelper.fileUrlToSystemPath('{}/{}'.format(doc.URL,'Scripts/python/lib'))
if not url in sys.path:
    sys.path.insert(0, url)
import outils

def testoutils(event=None):
    outils.msgbox(u"Importation de la bibliothèque <lib/outils> réussie !")
Pièces jointes
testpÿ.odt
(12.02 Kio) Téléchargé 302 fois
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

Re: [Python] Bibliothèque de fonctions dans un document

Message par jeanmi2403 »

Bonjour,
Hubert Lambert a écrit : le module zipimport est utilisé implicitement par python [/code]
Je suppose que la source documentaire est ici : https://docs.python.org/2/library/zipimport.html ?
Cordialement,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Python] Bibliothèque de fonctions dans un document

Message par Hubert Lambert »

En effet.
Et petite précision en relisant cette doc :
pydoc a écrit :[...] if a ZIP archive doesn’t contain .pyc files, importing may be rather slow
si tu comptes vraiment utiliser ce mécanisme, il y aura un intérêt à placer la version compilée de ta bibliothèque (.pyc) à côté de la version source (.py).
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

Re: [Python] Bibliothèque de fonctions dans un document

Message par jeanmi2403 »

Ok.
Trouvée dans __pycache__
[Résolu]
Merci,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Verrouillé