Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

import

29 réponses
Avatar
espacesobolev
Bonjour

Comment importer un module dont le nom est uniquement connu par une
cha=EEne de caract=E8res. Par exemple :

nom_du_module=3D'os'
import nom_du_module

Transformer le caract=E8re '1' en entier est imm=E9diat par int('1' ).
Mais je pense qu'il n'y a pas de solution =E0 ce probl=E8me. Qu'en pensez-
vous ?

Merci

10 réponses

1 2 3
Avatar
kib
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.

Avatar
Alain BARTHE
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

Avatar
Jean-Baptiste renard
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))

Avatar
kib
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.


Avatar
Méta-MCI \(MVP\)
Bonjour !

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

@+

Michel Claveau
Avatar
Méta-MCI \(MVP\)
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
Avatar
kib
Bonjour !
Attention, ce n'est pas : globals['os'] mais
globals()['os']
@+

Michel Claveau

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

@+

Kib.

Avatar
bruno.desthuilliers
On 26 jan, 01:46, Alain BARTHE wrote:
(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 !-)

Avatar
Alain BARTHE
On 26 jan, 01:46, Alain BARTHE wrote:
(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.


Avatar
kib

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.

@+

1 2 3