import

Le
espacesobolev
Bonjour

Comment importer un module dont le nom est uniquement connu par une
chaîne de caractères. Par exemple :

nom_du_module='os'
import nom_du_module

Transformer le caractère '1' en entier est immédiat par int('1' ).
Mais je pense qu'il n'y a pas de solution à ce problème. Qu'en pensez-
vous ?

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
kib
Le #676002
Bonjour

Comment importer un module dont le nom est uniquement connu par une
chaîne de caractères. Par exemple :

nom_du_module='os'
import nom_du_module

Transformer le caractère '1' en entier est immédiat par int('1' ).
Mais je pense qu'il n'y a pas de solution à ce problème. Qu'en pensez-
vous ?

Merci


Peut être comme ceci ?

#######################################
nom_du_module='math'
exec('import %s'%nom_du_module)
print math.pi
#######################################

Il faudra éventuelement jouer sur globlas() et locals() comme paramètres
de "exec".

A bientôt,

Kib.

Alain BARTHE
Le #676001
Bonjour

Comment importer un module dont le nom est uniquement connu par une
chaîne de caractères. Par exemple :

nom_du_module='os'
import nom_du_module

Transformer le caractère '1' en entier est immédiat par int('1' ).
Mais je pense qu'il n'y a pas de solution à ce problème. Qu'en pensez-
vous ?

Merci
Une solution, mais il y a peut-être plus simple :


modules = "os, sys"

cmd = "import " + modules"

exec (cmd)

print os.getenv ("HOME")

print sys.argv

Jean-Baptiste renard
Le #675698
espacesobolev wrote:
Bonjour

Comment importer un module dont le nom est uniquement connu par une
chaîne de caractères. Par exemple :

nom_du_module='os'
import nom_du_module


Bonjour,

Voilà une solution qui fonctionne.

globals().__setitem__(nom_du_module, __import__(nom_du_module))

kib
Le #675697
espacesobolev wrote:
Bonjour

Comment importer un module dont le nom est uniquement connu par une
chaîne de caractères. Par exemple :

nom_du_module='os'
import nom_du_module


Bonjour,

Voilà une solution qui fonctionne.

globals().__setitem__(nom_du_module, __import__(nom_du_module))


Bonjour,

Je trouve la solution de Jean-Baptiste très élégante, en gros tu
affectes une clé au dictionnaire globals(), c'est ça :

globals['os'] = ...?

Merci.


Méta-MCI \(MVP\)
Le #675696
Bonjour !

Attention, ce n'est pas :
globals['os']
mais
globals()['os']

@+

Michel Claveau
Méta-MCI \(MVP\)
Le #675695
Bonjour !

Tu peux utiliser le module imp, qui est fait pour ça.
Exemple :

import imp

nom='os'
fp, pathname, description = imp.find_module(nom)
os=imp.load_module(nom, fp, pathname, description)

print os.getenv("USERPROFILE")


à noter que tu peux ainsi changer le nom du module importé, ou importer
un module qui n'est pas dans PythonPATH.
Le mieux, c'est de faire ta propre fonction d'importation.

@-salutations

Michel Claveau
kib
Le #675694
Bonjour !
Attention, ce n'est pas : globals['os'] mais
globals()['os']
@+

Michel Claveau

Mea culpa, j'ai en effet oublié les parenthèses.

@+

Kib.

bruno.desthuilliers
Le #683054
On 26 jan, 01:46, Alain BARTHE (snip)
Une solution, mais il y a peut-être plus simple :

modules = "os, sys"
cmd = "import " + modules"
exec (cmd)


(snip)

Au moins 9 fois sur 10, quand tu es tenté d'utiliser exec ou eval, dis
toi qu'il y a une meilleure solution !-)

Alain BARTHE
Le #683052
On 26 jan, 01:46, Alain BARTHE (snip)
Une solution, mais il y a peut-être plus simple :

modules = "os, sys"
cmd = "import " + modules"
exec (cmd)


(snip)

Au moins 9 fois sur 10, quand tu es tenté d'utiliser exec ou eval, dis
toi qu'il y a une meilleure solution !-)

Je sais bien, c'est la même chose dans tous les langages interprétés,

mais je n'arrivais pas à remettre la main sur le nom du module (imp) qui
gère les importations.


kib
Le #683051

Au moins 9 fois sur 10, quand tu es tenté d'utiliser exec ou eval, dis
toi qu'il y a une meilleure solution !-)

Salut Bruno,


Je veux bien, mais en interne il est quasiment certain que imp les
utilise. Donc pourquoi s'en priver ?

Après tout exec et eval font partie intégrante de Python, je ne vois pas
ce qu'il ya de sâle à les utiliser.

@+

Publicité
Poster une réponse
Anonyme