probleme avec les packages. - Python - Programmation
Marsh Posté le 16-03-2004 à 21:44:54
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 ?
Marsh Posté le 16-03-2004 à 21:55:26
Taz a écrit : 1) list est réservé, donc ne pas l'utiliser. file aussi |
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 :
|
par ça
Code :
|
ça ne marche pas. il me fais un beaux Importe error je crosi bien
Marsh Posté le 16-03-2004 à 22:00:28
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
Marsh Posté le 16-03-2004 à 22:08:23
Taz a écrit : commence par vérifier que les noms a importer sont comme il faut. |
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
Marsh Posté le 16-03-2004 à 22:09:33
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 :
|
Marsh Posté le 16-03-2004 à 22:23:50
il est tout ce qu'il ya de plus correcte. le pire c'est que j'ai fais tester le
Code :
|
et ça marche. ( le testplugin etant un fichier de teste.
Marsh Posté le 16-03-2004 à 22:26:12
lunatik3 a écrit : il est tout ce qu'il ya de plus correcte. le pire c'est que j'ai fais tester le
et ça marche. ( le testplugin etant un fichier de teste. |
enfin quoi que le import ne marche pas tan que ça en faite.
Marsh Posté le 16-03-2004 à 22:29:57
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
Marsh Posté le 16-03-2004 à 22:32:41
Tu veux pas te servir du module imp et de la fonction load_module ?
Marsh Posté le 16-03-2004 à 22:33:46
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
Marsh Posté le 16-03-2004 à 22:36:09
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.)
Marsh Posté le 16-03-2004 à 22:38:15
Taz> ben tu foires à un endroit, parce que tout ça marche très bien
quand tu fais
mod == __import__
rajoure un
print mod
Marsh Posté le 16-03-2004 à 22:39:59
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. |
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?
Marsh Posté le 16-03-2004 à 22:41:43
Taz a écrit : Taz> ben tu foires à un endroit, parce que tout ça marche très bien |
vala un petit print mod:
Code :
|
si ça ce trouve il ya un truc qui deconne au niveau du __init__.py
Marsh Posté le 16-03-2004 à 22:43:32
chaica a écrit : |
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
Marsh Posté le 16-03-2004 à 22:43:43
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
Marsh Posté le 16-03-2004 à 22:47:25
Taz a écrit : ben non. t'as importé le package plugin, et dedans il n'y a pas de fonction |
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.
Marsh Posté le 16-03-2004 à 22:48:25
En tout cas catcher OSError autou de os.listdir() ce sera une bonne idée.
Marsh Posté le 16-03-2004 à 22:50:58
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.
Marsh Posté le 16-03-2004 à 22:58:59
alors ça ; ça marche:
Code :
|
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?
Marsh Posté le 16-03-2004 à 23:03:59
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
Marsh Posté le 16-03-2004 à 23:09:22
benoit@athlon >>> python plugin.py moule
moule.coin Ah bas les moules!
moule.plop Pan! Pan!
Marsh Posté le 16-03-2004 à 23:11:04
lunatik3 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()
Marsh Posté le 16-03-2004 à 23:11:49
Taz a écrit : benoit@athlon >>> python plugin.py moule |
??? kezako?
Marsh Posté le 16-03-2004 à 23:18:36
Taz a écrit : c'est toi qui déconne. écoute, print le mod que tu récupère avec l'__import__ et voilà. |
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.
Marsh Posté le 16-03-2004 à 23:19:52
lunatik3 a écrit : |
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.
Marsh Posté le 16-03-2004 à 23:20:04
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
Marsh Posté le 17-03-2004 à 09:26:37
j'ai finis par trouver la solution. reste plus qu'a bien securiser le tout:
Code :
|
voila.
Marsh Posté le 17-03-2004 à 10:05:32
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
Marsh Posté le 17-03-2004 à 10:52:34
Taz a écrit : 1) je crois pas que ça marche ça |
un effet de bord?
Marsh Posté le 16-03-2004 à 21:31:10
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"
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