Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb matplotlib

2 réponses
Avatar
Do Re Mi chel La Si Do
Bonjour !


Je tente de faire joujou avec matplotlib.

J'ai donc fait le script de test suivant :
import pylab
pylab.plot( pylab.rand(50), pylab.rand(50), 'go')
pylab.savefig('c:\\aaa.png')

Mais, si ce script fonctionne bien lorsque je le lance "tout seul", ça ne va
plus, lorsque je tente d'utiliser ce code dans un autre (gros) script.
J'obtiens :
Unexpected Python Error: exceptions.AttributeError: 'module' object
hax no attribute 'plot'

Pour être sûr, j'ai utilisé execfile, sur le script original. Même erreur.


J'ai modifié le script, en :
from pylab import *
plot( rand(50), rand(50), 'go')
savefig('c:\\aaa.png')

Ce qui fonctionne en script seul, mais, intégré à mon autre script, donne :
Unexpected Python Error: exceptions.AttributeError: name 'plot' is
not defined


J'ai ensuite essayé :
from pylab import plot,rand,savefig
plot( rand(50), rand(50), 'go')
savefig('c:\\aaa.png')

Qui me donne :
Unexpected Python Error: exceptions.AttributeError: Cannot import
name 'plot'


Je rappelle que tous ces scripts fonctionnent bien, lorsqu'ils sont lancés
indépendamment.

Pour l'instant, je ne sais plus trop quoi chercher. Si quelqu'un avait une
idée, merci d'avance.


Michel Claveau

2 réponses

Avatar
laurent
peut-être que l'erreur est dans le "gros-script", tu pourrais nous
dire comment tu l'utilise ce module.
Je ne vois pas pourquoi la fonction plot ne se retrouverait plus dans
l'espace de nom du module.
En faisant des comparaisons entre les deux dictionnaires locals() et
globals() pendant les deux exécutions, tu aurais peut-être une
meilleur vue de ce qui est importé en global ou en local dans le
module.
Et la variable PYTHON_PATH elle en dit quoi
(os.environ["PYTHON_PATH"]), peut-être que le package matplotlib n'est
visible pendant l'exécution du gros script.
Avatar
Do Re Mi chel La Si Do
Bonjour !


Merci de la réponse. Mais le problème est en train de se compliquer.

En effet, j'arrive à faire fonctionner le "gros" script, sauf dans certains
cas. Selon le "point de lancement", ça fonctionne ou non.

S'il est appelé depuis d'autres langages, via COM, ça fonctionne avec
AutoIt, VBScript, Javascript ; ça ne fonctionne pas depuis ObjectPal ou
Delphi.

J'ai un serveur COM en Python, et ça passe dans certains cas, pas dans
d'autres.

J'ai un serveur TCP/IP capable d'exécuter des scripts Python (à distance),
et, lui, ne pose aucun problème (mais c'est environ 1000 fois plus lent
qu'un appel direct).

En invite de commande, ça ne fonctionne pas. Mais, si on passe par un batch
(.BAT) ça marche.

Bref, je suis dans le brouillard complet. Ce qui me semble bizarre, c'est
que le message d'erreur soit toujours un message Python.


Je tente de me concentrer sur un point simple. Je peut provoquer l'erreur
suivante :
from pylab import plot
qui donne :
Cannot import name 'plot'
(pareil avec arange, ou rand, ou n'importe quelle fonction).

Comment connaître l'explication du "Cannot import" ? S'il ne trouve pas le
fichier, ou la fonction, ou a un problème de droit, ou d'encodage, ou autre
?
J'ai regardé le code source de pylab.py ; surprise, il est simple (1 ligne)
:
from matplotlib.pylab import *
J'ai essayé de remplacer par des appels directs, sans changement.


Il faut aussi que je vérifie qu'il n'y ait pas saturation de l'espace
d'environnement (ça m'est déjà arrivé).

Bref, je cherche encore. et, si je trouve quelque chose, je le ferai savoir.
Mais, vu que dans certains cas ça fonctionne, j'ai envie d'utiliser ces
solutions, sans chercher plus loin (même si ça m'énerve de ne pas
comprendre...)


@-salutations

Michel Claveau