[python] import de fichiers, comment ca marche ?

import de fichiers, comment ca marche ? [python] - Python - Programmation

Marsh Posté le 07-09-2004 à 17:46:49    

j'ai potassé un peu la doc sur les modules mais y'a un truc que je pige pas :
j'ai un script qui commence a etre long donc j'aimerais le splitter dans plusieurs fichiers en séparant les fonctions par utilité (par exemple j'ai myMain.py, myConf.py, myUtils.py, ...), le problème est que je pige pas comment importer proprement mes fonctions d'un fichier a l'autre
 
myMain utilise des fonctions présentent dans myUtils donc : import * from myUtils
myMain utilise des fonctions présentent dans myConf donc : import * from myConf
myConf utilise des fonctions présentent dans myUtils donc : import * from myUtils
...
 
et a chaque fois il me sort une erreur comme quoi dans myConf il ne peut pas importer ma fonction foo de mon fichier myUtils :/
 
je suppose que je suis passé a coté de quelque chose (double inclusion ou un truc dans le genre)
 
si vous avez des idées ...


---------------
\@/
Reply

Marsh Posté le 07-09-2004 à 17:46:49   

Reply

Marsh Posté le 07-09-2004 à 17:50:06    

y'a pas de probleme de double inclusion en python...
montre l'erreur exacte, et eventuellement la partie interessante du source (genre l'import a partir de myConf, et la definition de la fonction foo)

Reply

Marsh Posté le 07-09-2004 à 17:51:28    

jamais d'import * :o
par contre les inclusions récursives ça existe

Reply

Marsh Posté le 07-09-2004 à 17:52:59    

Taz a écrit :

jamais d'import * :o
par contre les inclusions récursives ça existe


ca devrait pas poser de probleme, puisque le module est caché dans sys.modules, on essaye pas de le relire, donc y'a pas de recursion infinie logiquement

Reply

Marsh Posté le 07-09-2004 à 17:53:03    

import * from foo saitraimal [:sisicaivrai]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 07-09-2004 à 18:04:36    

a vrai dire je m'en doutais un peu mais avec import foo ca marche pas non plus :
 
fichier1.py

Code :
  1. import fichier2
  2. def func1():
  3.     print "hello i'm func1 :)"
  4.     func3()
  5. def func2():
  6.     print "hello i'm func2 :)"
  7. if __name__ == '__main__':
  8.     func1()


 
fichier2.py

Code :
  1. import fichier1
  2. def func3():
  3.     print "hello i'm func3 :)"
  4.     func2()


 
output :

>python -u "fichier1.py"
hello i'm func1 :)
Traceback (most recent call last):
  File "fichier1.py", line 11, in ?
    func1()
  File "fichier1.py", line 5, in func1
    func3()
NameError: global name 'func3' is not defined
>Exit code: 1


 
:'(


Message édité par lint le 07-09-2004 à 18:06:19

---------------
\@/
Reply

Marsh Posté le 07-09-2004 à 18:07:47    

fichier2.func3()

Reply

Marsh Posté le 07-09-2004 à 18:08:04    

il faut préfixer par le nom du module quand on importe de cette maniere

Reply

Marsh Posté le 07-09-2004 à 18:09:23    

et y'a pas moyen d'importer la totalité d'un module ? ou alors c'est crade ?


---------------
\@/
Reply

Marsh Posté le 07-09-2004 à 18:10:50    

quand tu fais "import foo", ca crée un namespace
 
donc si t'as une fonction 'bar' dans le module 'foo', tu l'appelles en faisant
 

Code :
  1. import foo # importe le module
  2. foo.bar() # accède au membre 'bar' de 'foo'


 
Tu devrais te faire Dive Into Python, a mon avis c'a t'aiderait à apprendre 2-3 notions de base


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 07-09-2004 à 18:10:50   

Reply

Marsh Posté le 07-09-2004 à 18:12:26    

euh en fait je l'ai lu et ca m'a pas mal aidé ... mais c'etait y'a un mois, j'ai pas touché au code depuis et aujourd'hui je me suis contenté de la doc officielle [:joce]


---------------
\@/
Reply

Marsh Posté le 07-09-2004 à 18:14:47    

Citation :

et y'a pas moyen d'importer la totalité d'un module ? ou alors c'est crade ?


Quand tu fais import foo, ca importe l'intégralité du module foo hein -_-


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 07-09-2004 à 18:16:54    

ouais j'etais passé a coté
merci :jap:


---------------
\@/
Reply

Marsh Posté le 11-09-2004 à 20:26:45    

Taz a écrit :

jamais d'import * :o
par contre les inclusions récursives ça existe


 
mais
 

Citation :


Taz
from __future__ import *

Reply

Marsh Posté le 11-09-2004 à 21:09:32    

je ne sais pas si tu as saisis la nuance

Reply

Marsh Posté le 11-09-2004 à 21:42:40    

bah non

Reply

Marsh Posté le 11-09-2004 à 21:45:48    

faudrait faire un peu de python alors ...

Reply

Marsh Posté le 11-09-2004 à 21:48:21    

en même temps je suis sur le forum python, c'est aussi pour se renseigner.
 
moi import * from bidule ça plante
donc, je pensais que "import *" était un raccourci pour signifier "from Machin import *"
d'où icompréhension de ma part

Reply

Marsh Posté le 11-09-2004 à 21:50:51    

déjà la syntaxe à proscrire dans la majorité des cas c'est 'from A import *'
 
quand à 'from __future__ import *' tu peux y aller autant que tu veux

Reply

Marsh Posté le 11-09-2004 à 21:58:13    

ah ok, ça me rassure.
je pensais bien à from A import *  
 
et donc, effectivement, je vois pas la nuance entre from A import * avec A module python, et from __future__ import *
 
pourquoi __future__ est pas soumis à cette règle ?

Reply

Marsh Posté le 11-09-2004 à 22:14:56    

parce que __future__ est un module spécial au contenu variable et instable qui fournit des extensions généralement disponible dans la version suivante :o

Reply

Marsh Posté le 11-09-2004 à 22:18:13    

mais, quel problème tu trouves à from Machin import * qui ne soit pas vrai pour __future__ ?
 
parce que bon, moi le problème de from Machin import * , à part que ça me parraît un peu bordélique d'importer tout en vrac sans savoir, je vois pas

Reply

Marsh Posté le 11-09-2004 à 22:47:25    

ben oui c'est bordélique, déjà ça pose des problèmes de collisions et ça ralentit aussi l'exécution.

Reply

Marsh Posté le 11-09-2004 à 22:54:11    

bon

Reply

Marsh Posté le 13-09-2004 à 09:38:44    

from a import *
 
-> gros bordel parce que ca importe tout dans le namespace local
-> si tu as une fonction du même nom qu'une des fonctions importées, ou que tu définis une fonction du même nom qu'une fonction importée, tu fais comment?
 
un simple "import module" et t'as plus le problème, tout est plein de sécurité, et en plus tu peux utiliser les fonctions de gestion de contenu de python (histoire de lister les contenus de modules tout ca)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-01-2005 à 17:57:31    

j'ai un problème sous windows j'ai fais un réperoire inc
 
et j'ai un fichier main.py
 
dedans j'ai mis :
 
import inc/setupxml
 
seulement sa marche pas a cause du slash si je met un backslash sa ne marche pas non plus.
 
Merci de m'aider sa serais bien cool.

Reply

Marsh Posté le 28-01-2005 à 18:28:38    

tiburon a écrit :

j'ai un problème sous windows j'ai fais un réperoire inc
 
et j'ai un fichier main.py
 
import inc/setupxml
 


 
if faut utiliser un point :
 
import inc.setupxml
 
Le_GLu


---------------
Python facile : http://pythonfacile.free.fr/ Les ressources (liens) en français sur Python.
Reply

Marsh Posté le 31-01-2005 à 15:26:10    

Je dévellope sous windows et malheureusement le point ne fonctionne pas , voici le message d'erreur
 
 File "main.py", line 1, in ?
    import inc.setupxml
ImportError: No module named inc.setupxml
>Exit code: 1
 
 
 

Reply

Marsh Posté le 31-01-2005 à 15:30:42    

tiburon a écrit :

Je dévellope sous windows et malheureusement le point ne fonctionne pas , voici le message d'erreur
 
 File "main.py", line 1, in ?
    import inc.setupxml
ImportError: No module named inc.setupxml
>Exit code: 1


Il n'existe pas d'import relatif comme en C en Python. Le point sert pour la notion de package et de sous package. Donc si tu veux que inc.setupxml marche, il te faut transformer inc en package et setupxml en sous package de inc
 
Vu le nom, je doute qu'il faille vraiment faire comme ça. Je te suggère donc plustot de simplement mettre le répertoire inc dans le path de recherche des modules.


Message édité par Kristoph le 31-01-2005 à 15:31:01
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed