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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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.
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
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...)
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...)