Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/06/2009, à 15:10

Charlie42

Problème d'import avec Python

Bonjour,

J'essaye sous linux un programme que j'ai fais sous windows et qui marche bien sous XP.

Lors du démarrage je rencontre deux problèmes:

1°) Lors de l'import de mon fichier export_pdf.pyw, j'ai l'erreur suivante:

ImportError: No module named export_pdf

2°)Quand je lance une fonction qui appelle elle-même la class new de mon fichier select.pyw, j'ai le message d'erreur suivant:

Traceback (most recent call last):
  File "/home/perso/Bureau/programme/FRAME_notebook.pyw", line 150, in new_project
    frame = select.new(self, l, h)
AttributeError: 'module' object has no attribute 'new'

Il me semble que sous linux il faut rajouter une ligne lors des imports de fichiers .py, mais laquelle

Mes deux fichiers .pyw sont importés comme celà dans FRAME_notebook.pyw:

#-*- coding:utf-8 -*-
import wx
import select
import export_pdf
import reportlab
 
class Root(wx.Frame):
    ....

Quelqu'un peut-il m'aider à comprendre le problème et à trouver la solution?


D'avance merci

Hors ligne

#2 Le 16/06/2009, à 15:50

ppmt

Re : Problème d'import avec Python

le fichier export_pdf c'est un fichier qui vient avec ton programme?

si c'est le cas essaye de le renommer en export_pdf.py

je ne suis pas sur que python sous linux sache cherche des modules en pyw

Dernière modification par ppmt (Le 16/06/2009, à 15:51)


le dock dont vous avez toujours rêvé  Cairo-Dock
irc://irc.freenode.net/#Cairo-Dock-fr

Hors ligne

#3 Le 16/06/2009, à 17:16

philarmonie

Re : Problème d'import avec Python

Pour le problème d'import, le fichier export_pdf.pyw il est dans ton path ou dans le même répertoire que Frame_notebook.pyw?
Pour la non existence de la classe new je ne vois pas (tu l'as pas plutôt appelé New ta classe)
Essaye en console interactive

>>> import select
>>> 'new' in dir(select)
>>> 'New' in dir(select)

Sinon pourquoi tu fonctionnes avec les pyw et non avec les py?

Dernière modification par philarmonie (Le 16/06/2009, à 17:23)

#4 Le 16/06/2009, à 22:54

Charlie42

Re : Problème d'import avec Python

Je tiens tout d'abord à vous présenter mes excuses pour le problème d'export_pdf.pyw. Effectivement celui-ci est bien dans le même répertoire que Frame_notebook.pyw et effectivement aussi le renomer en export_pdf.py me règle le problème.

philarmonie a écrit :

Pour le problème d'import, le fichier export_pdf.pyw il est dans ton path ou dans le même répertoire que Frame_notebook.pyw?

Yes et donc mon problème, comme je l'ai indiqué ci-dessus est résolu.

philarmonie a écrit :

Pour la non existence de la classe new je ne vois pas (tu l'as pas plutôt appelé New ta classe)

Et non elle s'appelle bien new...:

class new(wx.Frame):
    def __init__(self, parent, l, h, titre):
        ...
philarmonie a écrit :

Essaye en console interactive

>>> import select
>>> 'new' in dir(select)

me retourne "False"

philarmonie a écrit :
>>> 'New' in dir(select)

me retourne

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'New' is not defined
philarmonie a écrit :

Sinon pourquoi tu fonctionnes avec les pyw et non avec les py?

Si je te le dis tu vas certainement me flinguer la tête... mais comme une faute avouée est à moitiée pardonnée, je me lance...:
Avant dans ma vie (il y a moins de 4 jours) j'étais un Windowien sen quête d'un monde meilleur, et suite à un CPC (Crash of P.C) et une perte du DD je suis (enfin) devenu Linuxien...
Trève de plaisanterie, quand je programmais sous XP, je trouvais plus pratique de mettre l'extension .pyw pour le rendu.
Pour info, le souci que j'ai est avec un programme qui fonctionne très bien sous windows. j'ai donc du mal à comprendre pourquoi j'ai ce bug???

Dernière modification par Charlie42 (Le 16/06/2009, à 22:58)

Hors ligne

#5 Le 16/06/2009, à 23:22

philarmonie

Re : Problème d'import avec Python

1. il faut toujours mettre l'extension .py (les .pyw sont automatiquement générés par l'interpréteur python à la première exécution du code)
2. tant que 'new' in dir(select) renvoie false, cela signifie qu'il ne trouve pas la classe dans le module
3. le message d'erreur avec New c'est parce que tu n'avais pas du mettre les ' ' pour dire que c'est une chaine de caractères

Il reste donc ce problème de la classe new qu'il ne trouve pas. Renseigne toi sur la commande dos2unix qui permet de convertir des fichiers textes créés sous un système Dos au format des fichiers textes d'un système Unix (les caractères de fin de ligne ne sont pas les mêmes sur les deux systèmes), le soucis vient peut être de là.

Dernière modification par philarmonie (Le 16/06/2009, à 23:22)

#6 Le 17/06/2009, à 08:11

Charlie42

Re : Problème d'import avec Python

J'ai essayé la commande dos2unix, mais elle n'a rien apporté de mieux.

Là je comprends vraiment pas ce qui peut se passer.:/


EDIT:
Je viens d'essayer un import du style

from select import new

,

l'erreur retournée est celle-ci

ImportError: cannot import name new

Là j'en perds mon latin...
Pire...
Je viens de refaire un essai avec un nouveau fichier construit comme select.py mais nomé essai_class.py. Et là pour le moment ça marche. Je renome ce fichier select.py et ça marche plus. Je le renome en select_new.py et là ça marche...???:/

Bizard tout ça...

Dernière modification par Charlie42 (Le 17/06/2009, à 08:24)

Hors ligne

#7 Le 17/06/2009, à 14:58

aleph2

Re : Problème d'import avec Python

La distribution Python contient un module nommé select.py et ton code
source aussi. Quand l'interpréteur cherche un module en suivant les instructions
du sys.path, (le "variable d'environnement" interne de Python de recherche de
modules), l'interpréteur tombe d'abord sur le module de la distribution Python
plutôt que sur celui de ton application.

En renommant ce module tu évites ainsi ce conflit. Le sys.path étant dynamique
et variant (ou pouvant varier) avec chaque application Python, il se pourrait
que ton application ne soit pas aussi propre qu'elle devrait l'être. et que
chanceusement elle fonctionne sur Windows et non sur Ubuntu. Normalement,
le première entrée du sys.path correspond au dossier/répertoire du script
exécuté.

Un bon moyen pour tester la bonne structure d'une application Python, quelle que
soit sa complexité, est de la mettre sur un clef usb.

.pyw et .py
-----------

Il y a sous Windows qu'un seul interpréteur Python (une dll), mais deux lanceurs
python.exe et pythonw.exe. Le premier "ouvre" une console et gère les flux d'entrée
et sortie, le deuxième non. On peut utiliser indiféremment l'un ou l'autre, le
deuxième est souvent préferré pour les applications avec interface graphique.
Les types MIME associent .pyw à pythonw et .py à python.

Le script d'amorçage d'un application Python étant normallement réduit à
sa plus simple expression, il est d'usage (Windows) pour une application avec interface
graphique de "livrer" deux scripts d'amorçage, un .py et un .pyw correspondant
à chacun des type MIME. (Pour une application, il n'y a qu'un seul .pyw).

Exemple, la démo de wxPython.

demo.py :

#!/usr/bin/env python

import Main
Main.main()

et

demo.pyw :

#!/usr/bin/env python

import Main
Main.main()