OVH Cloud OVH Cloud

Priorité dans les répertoires de modules

4 réponses
Avatar
ReM
Bonjour,

J'utilise 2 répertoires ou sont situés mes modules ( par ex /module1 et
/module2 ). Dans ces 2 repertoires je retrouve un module nommé config.py.
Dans /module1/config.py j'ai une variable dbname = "toto"
et dans /module2/config.py j'ai une variable dbname = "titi"

Ensuite dans mon script test.py je fais :

import sys
sys.path.insert(1, './module1')
import config as config1
print config1.dbname
sys.path.insert(0, './module2')
import config as config2
print config2.dbname

et j'obtiens :

toto
toto

Pourquoi je ne vais pas chercher le bon module lors de import config as
config2 ???

Merci ;o)

Rémi

4 réponses

Avatar
rafi
bonjour,

ReM wrote:

import sys
sys.path.insert(1, './module1')
import config as config1
print config1.dbname
sys.path.insert(0, './module2')
import config as config2
print config2.dbname

et j'obtiens :

toto
toto

Pourquoi je ne vais pas chercher le bon module lors de import config as
config2 ???


l'insertion dans le chemin des modules de python doit se faire par ajout
"à la fin". donc lorsqu'il recherche config il le trouve dans ./module1.
de plus, comme le module config est déjà chargé, il ne doit même pas
essayer de le recharger.

la solution est peut être, si tu ne veux pas nommer différemment les
deux fichiers config.py, de considérer les répertoires module1 et
module2 comme des packages python(*). ensuite, tu peux faire:

import module1.config as config1

(*) il faut que module1 et module2 soient dans le chemin des modules de
python et créer un fichier (vide c'est souvent suffisant) __init__.py
dans chacun des répertoires

hth


--
rafi

"Imagination is more important than knowledge."
(Albert Einstein)

Avatar
F. Petitjean

la solution est peut être, si tu ne veux pas nommer différemment les
deux fichiers config.py, de considérer les répertoires module1 et
module2 comme des packages python(*). ensuite, tu peux faire:

import module1.config as config1


from module1 import config as config1
si je ne m'abuse.

(*) il faut que module1 et module2 soient dans le chemin des modules de
python et créer un fichier (vide c'est souvent suffisant) __init__.py
dans chacun des répertoires

--

Ce qui se conçoit bien s'énonce clairement
Et les mots pour le dire viennent aisément.
Boileau Despréaux (dans l(Art Poétique)

Avatar
rafi
F. Petitjean wrote:

la solution est peut être, si tu ne veux pas nommer différemment les
deux fichiers config.py, de considérer les répertoires module1 et
module2 comme des packages python(*). ensuite, tu peux faire:

import module1.config as config1



from module1 import config as config1
si je ne m'abuse.


les deux sont corrects, mais cette seconde forme est peut être plus claire.

--
rafi

"Imagination is more important than knowledge."
(Albert Einstein)


Avatar
Christophe Cavalaria
rafi wrote:

F. Petitjean wrote:

la solution est peut être, si tu ne veux pas nommer différemment les
deux fichiers config.py, de considérer les répertoires module1 et
module2 comme des packages python(*). ensuite, tu peux faire:

import module1.config as config1



from module1 import config as config1
si je ne m'abuse.


les deux sont corrects, mais cette seconde forme est peut être plus
claire.



Il me semble que la forme from * import * pose problème en cas de reference
circulaire entre les modules. Je conseillerais de ne pas l'utiliser si
possible :)