Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1330 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  probleme avec les packages.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme avec les packages.

n°675394
Lunatik3
Serial nounours
Posté le 16-03-2004 à 21:31:10  profilanswer
 

voila je vous presente la probleme. je suis entrain de faire un moteur de plugin. et j'ai commencer a coder une methode qui doit charer les plugins. seulement les plugin je veux qu'ils soient dans un dossier separer appeler "plugin"

Code :
  1. def loadPlugIns (self):
  2.        # je liste le contenu du repertoir plugin
  3.        list = os.listdir("plugin" )
  4.        
  5.        #je verifie si les fichier contenu dans le repetoire
  6.        # son des fichier valide
  7.         for file in list:
  8.             if file.endswith(".py" ) and not file == "__init__.py":
  9.                
  10.                 # je recupere la partie devant le point du fichier
  11.                 mod = file.split("." )[0]
  12.                
  13.                 # je voudais importer le module.
  14.                 # mais ça plante car je n'est pas specifier
  15.                 #le package plugins.
  16.                 #si je le specifie ça plante aussi
  17.                 # en faite c la qu'est mon probleme
  18.                 mod = __import__(mod)
  19.                 try:
  20.                     # comme ça yahoo, je creer un objet ini
  21.                     #(le plug in)
  22.                     self.__listplug__.append(mod.init())
  23.                 except AttributeError:
  24.                     pass


 
 
dans les fait tout marche sauf la redirection vers le package plugin. ce qui m'emmerde un peu faut l'avouer.  
donc voila je bloque un peu la. donc si quelqu'un avais une petite idéé du probleme, ça m'eviterais peu etre quelques nuit blanche :)  
voila, merci d'avance :)
 

mood
Publicité
Posté le 16-03-2004 à 21:31:10  profilanswer
 

n°675395
Taz
bisounours-codeur
Posté le 16-03-2004 à 21:44:54  profilanswer
 

1) list est réservé, donc ne pas l'utiliser. file aussi
for f in os.listdir() sera bien meilleur
2) utilise le truc de os.path pour couper base.extension
3) ça veut dire quoi ça plant ?

n°675402
Lunatik3
Serial nounours
Posté le 16-03-2004 à 21:55:26  profilanswer
 

Taz a écrit :

1) list est réservé, donc ne pas l'utiliser. file aussi
for f in os.listdir() sera bien meilleur
2) utilise le truc de os.path pour couper base.extension
3) ça veut dire quoi ça plant ?


merci pour les conseils. je vais arranger ça.
sinon le "ça plante" c'est j'ai un dossier dans lequel j'ai des fichier pythons (mes plugins) je reussi a lister le contenu du dossier, mais je ne peux pas acceder a mes fichier python pour faire un import.
en d'autre terme si je remplcae ça:

Code :
  1. mod = file.split("." )[0]


par ça

Code :
  1. mod ="plugin."+file.split("." )[0]


ça ne marche pas. il me fais un beaux Importe error je crosi bien :)
 

n°675407
Taz
bisounours-codeur
Posté le 16-03-2004 à 22:00:28  profilanswer
 

commence par vérifier que les noms a importer sont comme il faut.
sinon y a rien à dire, tu merde ailleurs. si ça ne marche pas, dans un shell import machin.bidule échoue également

n°675424
Lunatik3
Serial nounours
Posté le 16-03-2004 à 22:08:23  profilanswer
 

Taz a écrit :

commence par vérifier que les noms a importer sont comme il faut.
sinon y a rien à dire, tu merde ailleurs. si ça ne marche pas, dans un shell import machin.bidule échoue également


hum, ok pas cool. je vais continuer a chercher.
c quoi cette histoire de os.path pour decouper en base.extension? juste histoire de pas m'endormir trop con ce soir :)
En faite si je peux faire mieux alors j'essaye de faire :)

n°675427
chaica
Posté le 16-03-2004 à 22:09:33  profilanswer
 

T'as vérifié avant d''importer si le nom de fichiers est correct? Avec un print mod?
Moi je vois plutôt un :

Code :
  1. mod = 'plugin.'+os.path.splitext(file)[0]


Message édité par chaica le 16-03-2004 à 22:10:56
n°675448
Lunatik3
Serial nounours
Posté le 16-03-2004 à 22:23:50  profilanswer
 

il est tout ce qu'il ya de plus correcte. le pire c'est que j'ai fais tester le

Code :
  1. import plugin.tesplugin

et ça marche. ( le testplugin etant un fichier de teste. :)

n°675452
Lunatik3
Serial nounours
Posté le 16-03-2004 à 22:26:12  profilanswer
 

lunatik3 a écrit :

il est tout ce qu'il ya de plus correcte. le pire c'est que j'ai fais tester le

Code :
  1. import plugin.tesplugin

et ça marche. ( le testplugin etant un fichier de teste. :)

enfin quoi que le import ne marche pas tan que ça en faite.

n°675453
chaica
Posté le 16-03-2004 à 22:27:33  profilanswer
 

Tu peux copier coller ton message d'erreur là?

n°675457
Lunatik3
Serial nounours
Posté le 16-03-2004 à 22:29:57  profilanswer
 

E:\prog\python>plugin.py
Traceback (most recent call last):
  File "E:\prog\python\plugin.py", line 84, in ?
    plugM.loadPlugIns()
  File "E:\prog\python\plugin.py", line 70, in loadPlugIn
    mod = mod.init()
AttributeError: 'module' object has no attribute 'init'
c'est un attribut error.
 
c'est quand je retire le try catch

mood
Publicité
Posté le 16-03-2004 à 22:29:57  profilanswer
 

n°675461
Taz
bisounours-codeur
Posté le 16-03-2004 à 22:31:13  profilanswer
 

ben y a pas d'init() dans ton module, cai tout

n°675465
chaica
Posté le 16-03-2004 à 22:32:41  profilanswer
 

Tu veux pas te servir du module imp et de la fonction load_module ?

n°675467
Taz
bisounours-codeur
Posté le 16-03-2004 à 22:33:46  profilanswer
 

bah __import__ est une fonction de base qui fonctionne très très bien d'un autre côté. cela dit, il faut tester toutes les possibilités

n°675470
chaica
Posté le 16-03-2004 à 22:35:31  profilanswer
 

J'espère que le monsieur il a un init() dans son module :D

n°675472
Lunatik3
Serial nounours
Posté le 16-03-2004 à 22:36:09  profilanswer
 

Taz> je cherche a acceder au fichier testplugin qui ce trouve dans mon repertoire plugin. et dans ce fichier la il ya un init c'est certain.  
chaica> a quoi servirais la methode load_module. j'y ai deja jeté un coup d'oeil, mais je sais pas trop a quoi ça sert. (faut dire je suis pas une super bete en anglais a mon plus grand maleur.)

n°675478
Taz
bisounours-codeur
Posté le 16-03-2004 à 22:38:15  profilanswer
 

Taz> ben tu foires à un endroit, parce que tout ça marche très bien
 
quand tu fais  
 
mod == __import__
 
rajoure un  
 
print mod

n°675485
chaica
Posté le 16-03-2004 à 22:39:59  profilanswer
 

lunatik3 a écrit :

Taz> je cherche a acceder au fichier testplugin qui ce trouve dans mon repertoire plugin. et dans ce fichier la il ya un init c'est certain.  
chaica> a quoi servirais la methode load_module. j'y ai deja jeté un coup d'oeil, mais je sais pas trop a quoi ça sert. (faut dire je suis pas une super bete en anglais a mon plus grand maleur.)


 
Ben à loader ton module. Je balance un peu toutes les soluces qui me passent par la tête hein...
Tu catches une exception autour de ton import? Si non c'est que tout se passe bien au niveau de l'import. T'as les bons droits sur le fichier?

n°675490
Lunatik3
Serial nounours
Posté le 16-03-2004 à 22:41:43  profilanswer
 

Taz a écrit :

Taz> ben tu foires à un endroit, parce que tout ça marche très bien
 
quand tu fais  
 
mod == __import__
 
rajoure un  
 
print mod


vala un petit print mod:

Code :
  1. E:\prog\python>plugin.py
  2. <module 'plugin' from 'E:\prog\python\plugin\__init__.pyc'>
  3. <module 'plugin' from 'E:\prog\python\plugin\__init__.pyc'>
  4. <module 'plugin' from 'E:\prog\python\plugin\__init__.pyc'>


 
si ça ce trouve il ya un truc qui deconne au niveau du __init__.py

n°675495
Lunatik3
Serial nounours
Posté le 16-03-2004 à 22:43:32  profilanswer
 

chaica a écrit :


 
Ben à loader ton module. Je balance un peu toutes les soluces qui me passent par la tête hein...
Tu catches une exception autour de ton import? Si non c'est que tout se passe bien au niveau de l'import. T'as les bons droits sur le fichier?


je bosse sous wndows. donc les droit je les ai.
je catch pas d'exception autour de mon importe, mais ça peut etre une idée pour plus tard :)

n°675497
Taz
bisounours-codeur
Posté le 16-03-2004 à 22:43:43  profilanswer
 

ben non. t'as importé le package plugin, et dedans il n'y a pas de fonction
 
 
repertoire avec un __init__.py -> package
fichier.py -> module

n°675501
Lunatik3
Serial nounours
Posté le 16-03-2004 à 22:47:25  profilanswer
 

Taz a écrit :

ben non. t'as importé le package plugin, et dedans il n'y a pas de fonction
 
 
repertoire avec un __init__.py -> package
fichier.py -> module


 
donc comment je fais pour recuperer mes class du module testplug qui ce trouve dans plugin? stp :) parce que la je nage un peu. je sens qu'on est pas loin. :)

n°675503
Taz
bisounours-codeur
Posté le 16-03-2004 à 22:48:19  profilanswer
 

ben import plugin.testplug

n°675504
chaica
Posté le 16-03-2004 à 22:48:25  profilanswer
 

En tout cas catcher OSError autou de os.listdir() ce sera une bonne idée.

n°675510
Lunatik3
Serial nounours
Posté le 16-03-2004 à 22:50:58  profilanswer
 

chaica a écrit :

En tout cas catcher OSError autou de os.listdir() ce sera une bonne idée.


 
ok je ferais ça.  
 
 
Taz> en faite meme pas j'ai deja tester. l'import ce fais sans pb mais il trouve pas de init().  
 
de plus c bon quand on sais comment s'appelle le plugin. mais quand on veut gerer l'import dynamiquement c pas super cool.

n°675513
Taz
bisounours-codeur
Posté le 16-03-2004 à 22:51:57  profilanswer
 

chezmoiçamarche

n°675527
Lunatik3
Serial nounours
Posté le 16-03-2004 à 22:58:59  profilanswer
 

alors ça ; ça marche:

Code :
  1. import plugin.testplug
  2.         mod = plugin.testplug.init()


mais comment je fais pour faire un import non static mais dynamqiue alors. je connais pas a l'avances tout les plug-ins contenu dans plugin. je me retrouve avec le pb du debut. avec load_module?

n°675534
Taz
bisounours-codeur
Posté le 16-03-2004 à 23:00:05  profilanswer
 

ben en listant, ça marche très bien

n°675547
Lunatik3
Serial nounours
Posté le 16-03-2004 à 23:03:59  profilanswer
 

Taz a écrit :

ben en listant, ça marche très bien


seulement le import ne marhe qu'avec des nom en dure ( genre plugin.testplug) mai spas avec une variable.  
genre  
 
f = 'plugin.testplug'
import f.  
et si j'utilise __import__(f) vous avez vu ça deconne

n°675567
Taz
bisounours-codeur
Posté le 16-03-2004 à 23:09:22  profilanswer
 

benoit@athlon >>> python plugin.py moule
moule.coin      Ah bas les moules!
moule.plop      Pan! Pan!

n°675575
Taz
bisounours-codeur
Posté le 16-03-2004 à 23:11:04  profilanswer
 

lunatik3 a écrit :


et si j'utilise __import__(f) vous avez vu ça deconne

c'est toi qui déconne. écoute, print le mod que tu récupère avec l'__import__ et voilà.
 
si tu fais import a.b
 
ben tu accèdes toujours à a.b en utilsant a.b comme écriture
 
donc mod.f() c'est pas plugin.truc.f()

n°675581
Lunatik3
Serial nounours
Posté le 16-03-2004 à 23:11:49  profilanswer
 

Taz a écrit :

benoit@athlon >>> python plugin.py moule
moule.coin      Ah bas les moules!
moule.plop      Pan! Pan!


???   kezako?

n°675600
Lunatik3
Serial nounours
Posté le 16-03-2004 à 23:18:36  profilanswer
 

Taz a écrit :

c'est toi qui déconne. écoute, print le mod que tu récupère avec l'__import__ et voilà.
 
si tu fais import a.b
 
ben tu accèdes toujours à a.b en utilsant a.b comme écriture
 
donc mod.f() c'est pas plugin.truc.f()


 
oui mais moi a la base j'en sais rien ce qu eje vais trouver dans le repertoire plugin. (enfin moi je sais le programme: non)  
si j'ai bien compris pour acceder en static  (parce que je sais qu'il ce trouve la) a testplug je fais un import.  
 
maintenant si je liste le contenu de plugin avec os.listdir("plugin" )
il va pas trop aimer un import  
 
enfin je sais pas si je deconne pou pas. c possible en tout cas. je vois pas ce que je pourrais faire avec import dans le cas present. import je peux l'utiliser qu'avec les chemins deja connu avant execution.

n°675602
Lunatik3
Serial nounours
Posté le 16-03-2004 à 23:19:52  profilanswer
 

lunatik3 a écrit :


 
oui mais moi a la base j'en sais rien ce qu eje vais trouver dans le repertoire plugin. (enfin moi je sais le programme: non)  
si j'ai bien compris pour acceder en static  (parce que je sais qu'il ce trouve la) a testplug je fais un import.  
 
maintenant si je liste le contenu de plugin avec os.listdir("plugin" )
il va pas trop aimer un import  
 
enfin je sais pas si je deconne pou pas. c possible en tout cas. je vois pas ce que je pourrais faire avec import dans le cas present. import je peux l'utiliser qu'avec les chemins deja connu avant execution.


 
sur ce je vais me coucher j'ai veiller plus que je ne voulais (meme si je sais ok c toi, mais je suis naze)
je reprendrai le pb demain matin. enfin merci beaucoup de votre aide a vous 2.

n°675605
Taz
bisounours-codeur
Posté le 16-03-2004 à 23:20:04  profilanswer
 

moule/coin.py
def hello():
    print 'Ah bas les moules!'
moule/__init__.py
moule/plop.py
def hello():
    print 'Pan! Pan!'
 
 
mais moi non plus

n°675842
Lunatik3
Serial nounours
Posté le 17-03-2004 à 09:26:37  profilanswer
 

j'ai finis par trouver la solution. reste plus qu'a bien securiser le tout:

Code :
  1. def loadPlugIns (self):
  2.         for f in os.listdir("plugin" ):
  3.             if f.endswith(".py" ):
  4.                 f = 'plugin.'+os.path.splitext(f)[0]
  5.                 mod = __import__(f,globals(),locals(),['init'])
  6.                 try:
  7.                     mod = mod.init()
  8.                     self.__listplug__[f] = mod
  9.                 except AttributeError:
  10.                     pass


voila.

n°675887
Taz
bisounours-codeur
Posté le 17-03-2004 à 10:05:32  profilanswer
 

1) je crois pas que ça marche ça
2) dégage vite ce nom à la con __listplug__
3) en fait ça marche avec un effet de bord à la con

n°675945
Lunatik3
Serial nounours
Posté le 17-03-2004 à 10:52:34  profilanswer
 

Taz a écrit :

1) je crois pas que ça marche ça
2) dégage vite ce nom à la con __listplug__
3) en fait ça marche avec un effet de bord à la con


un effet de bord?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  probleme avec les packages.

 

Sujets relatifs
[JAVASCRIPT] problème de compatibilité du code entre IE<--> Mozilla[STRUTS] Problème de connexion à la database
problème avec Eclipseprobleme envoi mail ifrance
Problème avec affichage d'une JtableProblème avec une variable dans une requête
Probleme Graphicsoverload <<, probleme :/
CVI probleme d'utilisation des API windows[Oracle] Probleme avec les packages
Plus de sujets relatifs à : probleme avec les packages.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR