[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 !

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

Messagepar jeanmi2403 » 05 Nov 2016 16:56

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 édition par jeanmi2403 le 07 Nov 2016 18:34, édité 1 fois.
Jean-Michel
LibO 5.1.6 et AoO 4.1.3
Windows 7 Familiale Premium SP1 x64 et Windows 10 x64
Avatar de l’utilisateur
jeanmi2403
Membre enthOOusiaste
Membre enthOOusiaste
 
Message(s) : 461
Inscrit le : 18 Jan 2008 10:02
Localisation : Sucy en Brie

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

Messagepar Hubert Lambert » 05 Nov 2016 18:28

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.2 sur Win7
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
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 946
Inscrit le : 06 Avr 2016 08:26

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

Messagepar jeanmi2403 » 05 Nov 2016 19:22

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 5.1.6 et AoO 4.1.3
Windows 7 Familiale Premium SP1 x64 et Windows 10 x64
Avatar de l’utilisateur
jeanmi2403
Membre enthOOusiaste
Membre enthOOusiaste
 
Message(s) : 461
Inscrit le : 18 Jan 2008 10:02
Localisation : Sucy en Brie

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

Messagepar Hubert Lambert » 05 Nov 2016 22:47

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.2 sur Win7
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
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 946
Inscrit le : 06 Avr 2016 08:26

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

Messagepar Hubert Lambert » 06 Nov 2016 17:24

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   AgrandirRéduire
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é 33 fois
AOOo 4.1.2 sur Win7
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
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 946
Inscrit le : 06 Avr 2016 08:26

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

Messagepar jeanmi2403 » 06 Nov 2016 17:53

Bonsoir Hubert,
Comme disaient mes élèves : "Trop fort !" :D
Bien joué et merci, je vais tester...
Bon dimanche,
Jean-Michel
LibO 5.1.6 et AoO 4.1.3
Windows 7 Familiale Premium SP1 x64 et Windows 10 x64
Avatar de l’utilisateur
jeanmi2403
Membre enthOOusiaste
Membre enthOOusiaste
 
Message(s) : 461
Inscrit le : 18 Jan 2008 10:02
Localisation : Sucy en Brie

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

Messagepar Hubert Lambert » 07 Nov 2016 10:41

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   AgrandirRéduire
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é 44 fois
AOOo 4.1.2 sur Win7
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
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 946
Inscrit le : 06 Avr 2016 08:26

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

Messagepar jeanmi2403 » 07 Nov 2016 15:00

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 5.1.6 et AoO 4.1.3
Windows 7 Familiale Premium SP1 x64 et Windows 10 x64
Avatar de l’utilisateur
jeanmi2403
Membre enthOOusiaste
Membre enthOOusiaste
 
Message(s) : 461
Inscrit le : 18 Jan 2008 10:02
Localisation : Sucy en Brie

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

Messagepar Hubert Lambert » 07 Nov 2016 15:24

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.2 sur Win7
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
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 946
Inscrit le : 06 Avr 2016 08:26

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

Messagepar jeanmi2403 » 07 Nov 2016 16:31

Ok.
Trouvée dans __pycache__
[Résolu]
Merci,
Jean-Michel
LibO 5.1.6 et AoO 4.1.3
Windows 7 Familiale Premium SP1 x64 et Windows 10 x64
Avatar de l’utilisateur
jeanmi2403
Membre enthOOusiaste
Membre enthOOusiaste
 
Message(s) : 461
Inscrit le : 18 Jan 2008 10:02
Localisation : Sucy en Brie


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 5 invité(s)